@yuuvis/client-core 2.3.29 → 2.3.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-core.mjs","sources":["../../../../../libs/yuuvis/client-core/src/lib/service/system/system.enum.ts","../../../../../libs/yuuvis/client-core/src/lib/model/dms-object.model.ts","../../../../../libs/yuuvis/client-core/src/lib/model/yuv-error.model.ts","../../../../../libs/yuuvis/client-core/src/lib/model/yuv-user.model.ts","../../../../../libs/yuuvis/client-core/src/lib/util/utils.helper.enum.ts","../../../../../libs/yuuvis/client-core/src/lib/util/utils.ts","../../../../../libs/yuuvis/client-core/src/lib/service/backend/api.enum.ts","../../../../../libs/yuuvis/client-core/src/lib/service/config/config.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/logger/logger.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/backend/backend.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/search/search.service.interface.ts","../../../../../libs/yuuvis/client-core/src/lib/service/cache/app-cache.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/system/system.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/search/search.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/config/config.interface.ts","../../../../../libs/yuuvis/client-core/src/lib/service/event/custom.events.token.ts","../../../../../libs/yuuvis/client-core/src/lib/service/event/event.interface.ts","../../../../../libs/yuuvis/client-core/src/lib/service/event/event.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/event/events.ts","../../../../../libs/yuuvis/client-core/src/lib/service/user/user.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/audit/audit.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/auth/auth.interface.ts","../../../../../libs/yuuvis/client-core/src/lib/service/config/core-config.tokens.ts","../../../../../libs/yuuvis/client-core/src/lib/service/config/core-config.ts","../../../../../libs/yuuvis/client-core/src/lib/service/object-config/object-config.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/user/user.providers.ts","../../../../../libs/yuuvis/client-core/src/lib/service/auth/auth.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/bpm/bpm.interface.ts","../../../../../libs/yuuvis/client-core/src/lib/service/bpm/bpm.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/catalog/catalog.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/clipboard/clipboard.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/connection/connection.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/core-init/core-init.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/device/device.interface.ts","../../../../../libs/yuuvis/client-core/src/lib/service/device/device.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/upload/upload.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/dms/dms.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/idm/idm.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/toast/toast.styles.ts","../../../../../libs/yuuvis/client-core/src/lib/service/toast/toast.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/notification/notification.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/pending-changes/pending-changes.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/pending-changes/pending-changes-guard.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/pending-changes/pending-changes-dialog.guard.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/pending-changes/pending-changes-tab.guard.directive.ts","../../../../../libs/yuuvis/client-core/src/lib/service/prediction/prediction.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/retention/retention.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/search/search.utils.ts","../../../../../libs/yuuvis/client-core/src/lib/service/session-storage/session-storage.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/object-form/object-form.model.ts","../../../../../libs/yuuvis/client-core/src/lib/service/user/user-storage.service.ts","../../../../../libs/yuuvis/client-core/src/lib/common/pipes/locale-number.pipe.ts","../../../../../libs/yuuvis/client-core/src/lib/common/pipes/filesize.pipe.ts","../../../../../libs/yuuvis/client-core/src/lib/common/pipes/locale-date.pipe.ts","../../../../../libs/yuuvis/client-core/src/lib/common/pipes/safe-html.pipe.ts","../../../../../libs/yuuvis/client-core/src/lib/common/pipes/keys.pipe.ts","../../../../../libs/yuuvis/client-core/src/lib/common/services/native-notifications.ts","../../../../../libs/yuuvis/client-core/src/lib/service/auth/auth.interceptor.ts","../../../../../libs/yuuvis/client-core/src/lib/service/connection/offline.interceptor.ts","../../../../../libs/yuuvis/client-core/src/lib/service/core-init/missing-translation-handler.ts","../../../../../libs/yuuvis/client-core/src/lib/service/core-init/translate-json-loader.ts","../../../../../libs/yuuvis/client-core/src/lib/provide.client.core.ts","../../../../../libs/yuuvis/client-core/src/yuuvis-client-core.ts"],"sourcesContent":["export const TENANT_HEADER = 'X-ID-TENANT-NAME';\n\nexport enum Situation {\n EDIT = 'EDIT',\n CREATE = 'CREATE',\n SEARCH = 'SEARCH'\n}\n\nexport const SystemType = {\n OBJECT: 'system:object',\n DOCUMENT: 'system:document',\n FOLDER: 'system:folder',\n AUDIT: 'system:audit',\n RELATIONSHIP: 'system:relationship',\n SOT: 'system:secondary'\n};\n\nexport const SystemResult = {\n DELETE: 'system:deletionResult'\n};\n\nexport const AdministrationRoles = {\n ADMIN: 'YUUVIS_TENANT_ADMIN',\n SYSTEM: 'YUUVIS_SYSTEM_INTEGRATOR',\n MANAGE_SETTINGS: 'YUUVIS_MANAGE_SETTINGS'\n};\n\nexport const UserRoles = {\n MULTI_TENANT: 'YUUVIS_MULTI_TENANT'\n};\n\nexport const SystemSOT = {\n DESTRUCTION_RETENTION: 'system:rmDestructionRetention'\n};\n\nexport const RetentionField = {\n RETENTION_END: 'system:rmExpirationDate',\n RETENTION_START: 'system:rmStartOfRetention',\n DESTRUCTION_DATE: 'system:rmDestructionDate'\n};\n\nexport const RelationshipTypeField = {\n SOURCE_ID: 'system:sourceId',\n TARGET_ID: 'system:targetId'\n}\n\nexport const BaseObjectTypeField = {\n OBJECT_TYPE_ID: 'system:objectTypeId',\n VERSION_NUMBER: 'system:versionNumber',\n CREATION_DATE: 'system:creationDate',\n CREATED_BY: 'system:createdBy',\n MODIFICATION_DATE: 'system:lastModificationDate',\n MODIFIED_BY: 'system:lastModifiedBy',\n ...RetentionField,\n PARENT_ID: 'system:parentId',\n PARENT_OBJECT_TYPE_ID: 'system:parentObjectTypeId',\n PARENT_VERSION_NUMBER: 'system:parentVersionNumber',\n TENANT: 'system:tenant',\n ACL: 'system:acl',\n TRACE_ID: 'system:traceId',\n SECONDARY_OBJECT_TYPE_IDS: 'system:secondaryObjectTypeIds',\n BASE_TYPE_ID: 'system:baseTypeId',\n TAGS: 'system:tags',\n OBJECT_ID: 'system:objectId'\n};\n\n// Fields provided by a special secondary object type that most of\n// the object types should have applied to them\nexport const ClientDefaultsObjectTypeField = {\n TITLE: 'appClient:clienttitle',\n DESCRIPTION: 'appClient:clientdescription'\n};\n\nexport const ContentStreamField = {\n LENGTH: 'system:contentStreamLength',\n MIME_TYPE: 'system:contentStreamMimeType',\n FILENAME: 'system:contentStreamFileName',\n ID: 'system:contentStreamId',\n RANGE: 'system:contentStreamRange',\n REPOSITORY_ID: 'system:contentStreamRepositoryId',\n DIGEST: 'system:digest',\n ARCHIVE_PATH: 'system:archivePath'\n};\n\nexport const AuditField = {\n REFERRED_OBJECT_ID: 'system:referredObjectId',\n CREATION_DATE: 'system:creationDate',\n VERSION: 'system:versionNumber',\n DETAIL: 'system:detail',\n CREATED_BY: 'system:createdBy',\n ACTION: 'system:action',\n SUBACTION: 'system:subaction'\n};\n\nexport const ParentField = {\n asvaktenzeichen: 'tenKolibri:asvaktenzeichen',\n asvaktenzeichentext: 'tenKolibri:asvaktenzeichentext',\n asvsichtrechte: 'tenKolibri:asvsichtrechte',\n asvvorgangsname: 'tenKolibri:asvvorgangsname',\n asvvorgangsnummer: 'tenKolibri:asvvorgangsnummer'\n};\n\nexport enum ContentStreamAllowed {\n ALLOWED = 'allowed',\n NOT_ALLOWED = 'notallowed',\n REQUIRED = 'required'\n}\n\n// classifications applied to object type fields\nexport enum Classification {\n STRING_CATALOG_I18N = 'i18n:catalog',\n STRING_CATALOG_CUSTOM = 'custom:catalog',\n STRING_CATALOG_DYNAMIC = 'dynamic:catalog',\n STRING_CATALOG = 'catalog',\n STRING_ORGANIZATION = 'id:organization',\n STRING_ORGANIZATION_SET = 'id:organization:set',\n STRING_REFERENCE = 'id:reference',\n STRING_EMAIL = 'email',\n STRING_URL = 'url',\n STRING_PHONE = 'phone',\n NUMBER_FILESIZE = 'filesize',\n NUMBER_DIGIT = 'digit',\n BOOLEAN_SWITCH = 'switch',\n SYSTEM_SOT = 'systemsot',\n PREDICTION_CLASSIFY = 'prediction:classify',\n TABLE_SORTABLE = 'sortable'\n}\n\n// classifications applied to object types\nexport enum ObjectTypeClassification {\n SEARCH_FALSE = 'appClient:search:false',\n CREATE_FALSE = 'appClient:create:false',\n OBJECT_TYPE_ICON = 'appClient:icon'\n}\n\n// classifications applied to object types\nexport enum ObjectTypePropertyClassification {\n SUMMARY_HIDDEN = 'appClient:summary:hidden'\n}\n\n// classifications applied to secondary object types\nexport enum SecondaryObjectTypeClassification {\n REQUIRED = 'appClient:required',\n PRIMARY = 'appClient:primary',\n EXTENSION_ADD_FALSE = 'appClient:extension:add:false',\n EXTENSION_REMOVE_FALSE = 'appClient:extension:remove:false'\n}\n\n// special internal types of object type fields\nexport enum InternalFieldType {\n STRING_ORGANIZATION_SET = 'string:organization:set',\n STRING_ORGANIZATION = 'string:organization',\n STRING_REFERENCE = 'string:reference',\n STRING_CATALOG = 'string:catalog',\n STRING_CATALOG_I18N = 'string:catalog:i18n',\n STRING_DYNAMIC_CATALOG = 'string:catalog:dynamic',\n BOOLEAN_SWITCH = 'boolean:switch'\n}\n\nexport enum ObjectTag {\n AFO = 'appclient:dlm:prepare'\n}\n\n// possible states of a DLM item\nexport const AFO_STATE = {\n // created but no FSOT assigned so far\n IN_PROGRESS: 0,\n // an FSOT has been assigned\n READY: 1\n};\n\nexport const ColumnConfigSkipFields = [\n BaseObjectTypeField.OBJECT_ID,\n BaseObjectTypeField.OBJECT_TYPE_ID,\n BaseObjectTypeField.PARENT_ID,\n BaseObjectTypeField.PARENT_OBJECT_TYPE_ID,\n BaseObjectTypeField.PARENT_VERSION_NUMBER,\n BaseObjectTypeField.TENANT,\n BaseObjectTypeField.TRACE_ID,\n // BaseObjectTypeField.TAGS,\n BaseObjectTypeField.BASE_TYPE_ID,\n ContentStreamField.ID,\n ContentStreamField.RANGE,\n ContentStreamField.REPOSITORY_ID,\n ContentStreamField.DIGEST,\n ContentStreamField.ARCHIVE_PATH\n];\n","import { ContentStream } from '../service/dms/dms.service.interface';\nimport { SearchResultItem } from '../service/search/search.service.interface';\nimport { BaseObjectTypeField, SystemType } from '../service/system/system.enum';\nimport { DmsObjectAuditInfo, DmsObjectPermissions } from './dms-object.interface';\n/**\n * `DmsObject` is a business object of a type that generally contain a document file in addition to its metadata.\n * Document file can be text documents, e-mails, image files, video, etc.\n * Each object type classifies the object and defines the properties that the object must have or is allowed to have.\n */\nexport class DmsObject {\n id: string;\n parentId: string;\n\n content?: ContentStream;\n data: Record<string, unknown>;\n\n isFolder: boolean;\n objectTypeId: string;\n\n // permissions for the object. If undefined, we do not know the permissions\n permissions?: DmsObjectPermissions;\n // TODO: not clear, objects are collection of sots\n // contentStreamAllowed?: ContentStreamAllowed;\n version: number;\n created: DmsObjectAuditInfo;\n modified: DmsObjectAuditInfo;\n sots: string[] = [];\n\n /**\n * @ignore\n */\n constructor(searchResultItem: SearchResultItem) {\n this.id = searchResultItem.fields.get(BaseObjectTypeField.OBJECT_ID);\n this.version = searchResultItem.fields.get(BaseObjectTypeField.VERSION_NUMBER);\n this.objectTypeId = searchResultItem.objectTypeId;\n this.parentId = searchResultItem.fields.get(BaseObjectTypeField.PARENT_ID);\n this.data = this.#generateData(searchResultItem.fields);\n\n this.isFolder = searchResultItem.fields.get(BaseObjectTypeField.BASE_TYPE_ID) === SystemType.FOLDER;\n // this.contentStreamAllowed = objectType.contentStreamAllowed;\n\n this.created = {\n on: searchResultItem.fields.get(BaseObjectTypeField.CREATION_DATE),\n by: {\n id: searchResultItem.fields.get(BaseObjectTypeField.CREATED_BY),\n title: searchResultItem.fields.get(BaseObjectTypeField.CREATED_BY + '_title')\n }\n };\n this.modified = {\n on: searchResultItem.fields.get(BaseObjectTypeField.MODIFICATION_DATE),\n by: {\n id: searchResultItem.fields.get(BaseObjectTypeField.MODIFIED_BY),\n title: searchResultItem.fields.get(BaseObjectTypeField.MODIFIED_BY + '_title')\n }\n };\n\n if (searchResultItem.content) {\n this.content = searchResultItem.content;\n }\n\n if (searchResultItem.permissions) {\n this.permissions = {\n readIndexData: searchResultItem.permissions.read && searchResultItem.permissions.read.includes('metadata'),\n readContent: searchResultItem.permissions.read && searchResultItem.permissions.read.includes('content'),\n writeIndexData: searchResultItem.permissions.write && searchResultItem.permissions.write.includes('metadata'),\n writeContent: searchResultItem.permissions.write && searchResultItem.permissions.write.includes('content'),\n deleteObject: searchResultItem.permissions.delete && searchResultItem.permissions.delete.includes('object'),\n deleteContent: searchResultItem.permissions.delete && searchResultItem.permissions.delete.includes('content')\n };\n }\n\n this.sots = searchResultItem.fields.get(BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS) || [];\n }\n\n // /**\n // * Get the value (state) of a certain tag\n // * @param name The tags name\n // * @returns The value of the tag or null if the tag does not exist\n // */\n // getTag(name: string): any {\n // const tags: unknown[][] = this.data[BaseObjectTypeField.TAGS] as unknown[][];\n // const tag: unknown[] | null = tags ? (tags.find((t: any) => t[0] === name) as unknown[]) : null;\n // return tag ? tag[1] : null;\n // }\n\n // getRetentionState(): RetentionState {\n // if (this.data[RetentionField.RETENTION_START]) {\n // const retentionStart = new Date(this.data[RetentionField.RETENTION_START] as string);\n // const retentionEnd = new Date(this.data[RetentionField.RETENTION_END] as string);\n // const today = new Date();\n // return retentionStart <= today && today <= retentionEnd\n // ? RetentionState.ACTIVE\n // : today < retentionStart\n // ? RetentionState.INACTIVE\n // : RetentionState.DESTRUCT;\n // } else {\n // return RetentionState.NONE;\n // }\n // }\n\n #generateData(fields: Map<string, any>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, val] of fields.entries()) {\n result[key] = val;\n }\n return result;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\n\n/**\n * @ignore\n */\nexport class YuvError implements Error {\n\n get name() {\n return this._name || this.originalError.name || '';\n }\n\n get message() {\n return this._message || this.originalError.message || '';\n }\n\n get stack() {\n return this.originalError.stack;\n }\n\n get status() {\n return this.originalError.status;\n }\n\n get url() {\n return this.originalError.url;\n }\n\n get skipNotification() {\n return this._skipNotification === undefined ? !!this.originalError.skipNotification : this._skipNotification;\n }\n\n get isHttpErrorResponse() {\n return this.originalError.isHttpErrorResponse || this.originalError instanceof HttpErrorResponse;\n }\n\n constructor(public originalError: any | Error, private _name?: string, private _message?: string, private _skipNotification: boolean = false) {\n }\n\n toString() {\n return this.originalError.toString();\n }\n}\n","import { StoredObjectConfig } from \"../service/object-config/object-config.interface\";\n\n/**\n * User account configuration\n */\nexport class YuvUser {\n\n private DEFAULT_USER_LOCALE = 'en';\n\n id: string;\n username: string;\n firstname: string;\n lastname: string;\n title: string;\n email: string;\n image: string;\n tenant: string;\n domain: string;\n authorities: string[];\n substituteOf: string[];\n enabled: boolean;\n\n /**\n * User settings\n */\n uiDirection?: string;\n /**\n * User settings\n */\n userSettings: UserSettings;\n /**\n * @ignore\n */\n constructor(json: any, userSettings?: UserSettings) {\n this.id = json.id;\n this.username = json.username;\n this.firstname = json.firstname;\n this.lastname = json.lastname;\n this.email = json.email;\n this.image = json.image;\n this.tenant = json.tenant;\n this.domain = json.domain;\n this.authorities = json.authorities;\n this.substituteOf = json.substituteOf;\n this.enabled = json.enabled;\n\n this.title = json.displayName || (this.firstname && this.lastname) ? `${this.lastname}, ${this.firstname} (${this.username})` : this.username;\n this.userSettings = userSettings || { locale: this.DEFAULT_USER_LOCALE };\n }\n\n /**\n * Gets the users configured client locale\n * @returns locale string\n */\n public getClientLocale(fallback?: string): string {\n return this.userSettings?.locale || fallback || this.DEFAULT_USER_LOCALE;\n }\n\n public getFullName(): string {\n return `${this.lastname}, ${this.firstname}`;\n }\n\n public getDisplayNameName(): string {\n return `${this.lastname}, ${this.firstname} (${this.username})`;\n }\n}\n/**\n * Interface for user settings\n */\nexport interface UserSettings {\n locale: string;\n clientAppSettings?: Record<string, any>; \n}\n","export enum Sort {\n ASC = 'asc',\n DESC = 'desc'\n}\n\nexport enum ClassificationPrefix {\n EMAIL = 'mailto:',\n EMAIL_ICON = 'envelope',\n PHONE = 'tel:',\n PHONE_ICON = 'phone',\n URL = '',\n URL_ICON = 'globe'\n}\n\nexport type FormattedMailTo = string | string[];\n","import { EMPTY as observableEmpty } from 'rxjs';\nimport { FormattedMailTo, Sort } from './utils.helper.enum';\nimport { RangeValue } from '../model/range-value.interface';\n\nexport class Utils {\n public static readonly DEFAULT_RANGE_TIME_V1 = 'T00:00:00.000';\n public static readonly DEFAULT_RANGE_TIME_V2 = 'T23:59:59.000';\n public static readonly DEFAULT_TIME_OFFSET_V2 = (60000 * 60 * 24) - 1; // T+23:59:59:999\n\n static optionsToURLParams(options: Record<string, any>): string {\n if (options) {\n const searchParams = new URLSearchParams();\n Object.keys(options).map((k) => searchParams.append(k, options[k]));\n return `?${searchParams.toString()}`;\n }\n return '';\n }\n\n /**\n * Get all focusable child elements of a host element.\n * @param host The host/parent element\n * @returns Array of focusable child elements\n */\n public static getFocusableChildren(host: HTMLElement): Element[] {\n return Array.from(host.querySelectorAll('a[href], button, input, textarea, select, details,[tabindex]:not([tabindex=\"-1\"])')).filter(\n (el) => !el.hasAttribute('disabled') && !el.getAttribute('aria-hidden')\n );\n }\n\n public static hasProperty(o: unknown, property: string): boolean {\n if (typeof o !== 'object' || o === null) {\n return false;\n }\n return Object.hasOwn(o, property);\n }\n\n public static patternToRegExp(pattern: string): RegExp {\n return new RegExp(pattern.replaceAll('*', '.*'));\n }\n\n /**\n * Utility method for adding parameters to a given URI.\n *\n * @param uri The uri string to attach the parameters to\n * @param params The object containing parameters to be appended\n * @returns the given uri extended by the given parameters + remove empty parameters\n */\n public static buildUri(uri: string, params: any): string {\n const q = Object.keys(params)\n .filter((k) => !Utils.isEmptyOrFalse(params[k]))\n .map((k) => k + '=' + encodeURIComponent(typeof params[k] === 'object' ? JSON.stringify(params[k]) : params[k]))\n .join('&');\n return uri + (q ? '?' + q : '');\n }\n\n public static formatMailTo(value: FormattedMailTo, isEmail: boolean): FormattedMailTo {\n if (isEmail && !!value) {\n if (Array.isArray(value)) {\n return value.join().replace(/,/g, '; ');\n } else {\n return value.replace(/,/g, '; ');\n }\n }\n return value;\n }\n\n /**\n * Creates a unique identifier.\n * @returns A Universally Unique Identifier\n */\n public static uuid(): string {\n return Utils._p8() + Utils._p8(true) + Utils._p8(true) + Utils._p8();\n }\n\n /**\n * Encode a filename safe for sending chars beyond ASCII-7bit using quoted printable encoding.\n *\n * @param filename The file name\n * @returns The quoted printable filename\n */\n public static encodeFileName(filename: string): string {\n const fileName = Utils.encodeToQuotedPrintable(Utils.encodeToUtf8(filename)).replace(/_/g, '=5F');\n return `=?UTF-8?Q?${fileName}?=`;\n }\n\n /**\n *\n * @param boolean s\n * @return string\n */\n private static _p8(s?: boolean): string {\n const p = (Math.random().toString(16) + '000000000').substr(2, 8);\n return s ? `-${p.substr(0, 4)}-${p.substr(4, 4)}` : p;\n }\n\n /**\n * Converts a javascript text to the utf-8 converted variant.\n * See [unicode]{@link http://thlist.onlinehome.de/thomas_homepage/unicode/UTF-8%20Konvertierung%20mittels%20JavaScript.htm} for reference\n *\n * @param rawinput The input string\n * @returns The utf-8 converted string\n */\n private static encodeToUtf8(rawinput: string) {\n /**\n * Normalize line breaks\n */\n rawinput = rawinput.replace(/\\r\\n/g, '\\n');\n let utfreturn = '';\n for (let n = 0; n < rawinput.length; n++) {\n /**\n * Unicode for current char\n */\n const c = rawinput.charCodeAt(n);\n if (c < 128) {\n /**\n * All chars range 0-127 => 1byte\n */\n utfreturn += String.fromCharCode(c);\n } else if (c > 127 && c < 2048) {\n /**\n * All chars range from 127 to 2047 => 2byte\n */\n utfreturn += String.fromCharCode((c >> 6) | 192);\n utfreturn += String.fromCharCode((c & 63) | 128);\n } else {\n /**\n * All chars range from 2048 to 66536 => 3byte\n */\n utfreturn += String.fromCharCode((c >> 12) | 224);\n utfreturn += String.fromCharCode(((c >> 6) & 63) | 128);\n utfreturn += String.fromCharCode((c & 63) | 128);\n }\n }\n return utfreturn;\n }\n\n /**\n * See [quoted-printable]{@link https://github.com/mathiasbynens/quoted-printable/blob/master/quoted-printable.js}\n **/\n private static quotedPrintable(symbol: string) {\n if (symbol > '\\xFF') {\n throw RangeError('`encodeToQuotedPrintable` expects extended ASCII input only. Missing prior UTF-8 encoding?');\n }\n const codePoint = symbol.charCodeAt(0);\n const hexadecimal = codePoint.toString(16).toUpperCase();\n return '=' + ('0' + hexadecimal).slice(-2);\n }\n\n /**\n * Encode symbols that are definitely unsafe (i.e. unsafe in any context). The regular expression describes these unsafe symbols.\n *\n * @param rawinput Input string to be encoded\n * @returns The encoded string\n */\n private static encodeToQuotedPrintable(rawinput: string): string {\n const encoded = rawinput.replace(/[\\0-\\b\\n-\\x1F=\\x7F-\\uD7FF\\uDC00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]/g, this.quotedPrintable);\n return encoded;\n }\n\n /**\n * Sorts An Array of Object by given key\n * See [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}\n *\n * @param key\n * @param order\n * @param locales\n * @param options\n * @returns (a: any, b: any) => number\n */\n public static sortValues(key = '', order = Sort.ASC, locales?: string | string[], options?: Intl.CollatorOptions) {\n const f = (a: any, b: any) => {\n let comparison: number;\n const varA = Utils.getProperty(a, key);\n const varB = Utils.getProperty(b, key);\n\n if (typeof varA === 'number' && typeof varB === 'number') {\n comparison = varA - varB;\n } else if (varA instanceof Date && varB instanceof Date) {\n comparison = new Date(varA).getTime() - new Date(varB).getTime();\n } else {\n const stringA = varA || varA === 0 ? varA.toString() : '';\n const stringB = varB || varB === 0 ? varB.toString() : '';\n comparison = stringA.localeCompare(stringB, locales, options);\n }\n return order === Sort.DESC ? comparison * -1 : comparison;\n };\n return f;\n }\n\n /**\n * [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}\n *\n * @param object\n * @param string key\n * @returns any\n */\n public static getProperty(object: any, key = ''): any {\n const f = key ? key.split('.').reduce((o, k) => (o || {})[k], object) : object;\n return f;\n }\n\n /**\n * @param object\n * @param key\n * @param value\n */\n public static setProperty(object: any, key = '', value: any): any {\n const [head, ...rest] = key.split('.');\n !rest.length ? (object[head] = value) : Utils.setProperty(object[head] || (object[head] = {}), value, rest.join('.'));\n }\n\n /**\n * Use on Observable.catch or Observable.subscribe to return empty value\n * [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}\n *\n * @param (error) => any callback\n * @returns (error) => Observable<never>\n */\n public static empty(callback?: (error: any) => any) {\n const f = () => {\n return observableEmpty;\n };\n return f;\n }\n\n // /**\n // * Use on Observable.catch with specific skipNotification function !!!\n // * [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}\n // *\n // * @param skipNotification\n // * @param callback\n // * @param name\n // * @param message\n // */\n // public static catchSkip(skipNotification?: (error: any) => any, callback?: (error: any) => any, name?: string, message?: string) {\n // const f = (error: any) => {\n // const _error = callback && callback(error);\n // const _skipNotification = skipNotification && skipNotification(error);\n // return throwError(() => new YuvError(_error instanceof Error ? _error : error, name, message, _skipNotification));\n // };\n // return f;\n // }\n\n // /**\n // * Use on Observable.catch !!!\n // * [ng-packagr issues]{@link https://github.com/dherges/ng-packagr/issues/696}\n // *\n // * @param callback\n // * @param name\n // * @param message\n // * @param skipNotification\n // * @return (error) => Observable<never>\n // */\n // public static catch(callback?: (error: any) => any, name?: string, message?: string, skipNotification?: boolean) {\n // const f = (error: any) => {\n // const _error = callback && callback(error);\n // return throwError(() => new YuvError(_error instanceof Error ? _error : error, name, message, skipNotification));\n // };\n // return f;\n // }\n\n // /**\n // * Use on Observable.subscribe !!!\n // * [ng-packagr issues]{@link https://github.com/dherges/ng-packagr/issues/696}\n // *\n // * @param callback\n // * @param name\n // * @param message\n // * @param skipNotification\n // * @return (error) => void\n // */\n // public static throw(callback?: (error: any) => any, name?: string, message?: string, skipNotification?: boolean) {\n // const f = (error: any) => {\n // const _error = callback && callback(error);\n // throw new YuvError(_error instanceof Error ? _error : error, name, message, skipNotification);\n // };\n // return f;\n // }\n\n // /**\n // * Use on Observable.subscribe only if you want to skip notification / toast!!!\n // *\n // * @param callback\n // * @param name\n // * @param message\n // * @param skipNotification\n // * @return (error) => void\n // */\n // public static logError(callback?: (error: any) => any, name?: string, message?: string, skipNotification = true) {\n // return Utils.throw(callback, name, message, skipNotification);\n // }\n\n // /**\n // * Checks if element is visible\n // *\n // * @param elem\n // * @return boolean\n // */\n // public static isVisible(elem: any): boolean {\n // return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n // }\n\n public static getBaseHref(removeTrailingSlash?: boolean) {\n const baseEl = document.getElementsByTagName('base')[0];\n const baseHref = baseEl ? baseEl.getAttribute('href') : undefined;\n return baseHref ? (removeTrailingSlash ? baseHref.substr(0, baseHref.length - 1) : baseHref) : '';\n }\n\n /**\n * Truncate a string (first argument) if it is longer than the given maximum string length (second argument).\n * Return the truncated string with a ... ending or whats provided.\n *\n * @param string str\n * @param number num\n */\n public static truncateString(str: string, num: number, ending = '...') {\n if (str.length > num) {\n if (num > 3) {\n num -= 3;\n }\n str = `${str.substring(0, num)}${ending}`;\n }\n return str;\n }\n\n /**\n * Get the TimeZone Offsest as minutes\n */\n public static getTimezoneOffset(): number {\n return new Date().getTimezoneOffset();\n }\n\n /**\n * Transform to date with yyyy-mm-dd format\n */\n public static transformDate(v: Date | string): string {\n return v && new Date(new Date(v).getTime() - new Date(v).getTimezoneOffset() * 60 * 1000).toISOString().slice(0, 10);\n }\n\n public static isEdge(): boolean {\n return new RegExp('Edge', 'i').test(navigator.userAgent);\n }\n\n public static isFirefox(): boolean {\n return new RegExp('firefox', 'i').test(navigator.userAgent);\n }\n\n public static isSafari(): boolean {\n return new RegExp('^((?!chrome|android|crios|fxios).)*safari', 'i').test(navigator.userAgent);\n }\n\n public static isEmpty(obj: any) {\n if (obj == null || obj === '') {\n return true;\n }\n\n if (typeof obj === 'number') {\n return isNaN(obj);\n }\n\n return typeof obj === 'boolean' ? false : !Object.keys(obj).length;\n }\n\n public static isEmptyOrFalse(val: any) {\n return typeof val === 'boolean' ? !val : Utils.isEmpty(val);\n }\n\n public static escapeHtml(str: string) {\n str = str ? str : '';\n const entityMap: any = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n return String(str).replace(/[&<>\"'\\/]/g, (s) => entityMap[s]);\n }\n\n public static arrayToObject<T>(\n arr: any[] = [],\n keyProperty?: string | ((o: any) => string),\n valueProperty?: string | ((o: any) => any)\n ): { [key: string]: T } {\n const key = typeof keyProperty === 'string' ? (o: any) => o[keyProperty] : keyProperty;\n const value = typeof valueProperty === 'string' ? (o: any) => o[valueProperty] : valueProperty;\n return arr.reduce((acc: any, cur, i) => {\n acc[key ? key(cur) : i] = value ? value(cur) : cur;\n return acc;\n }, {});\n }\n\n // public static navigate(newTab: boolean, router: Router, commands: any[], navigationExtras?: NavigationExtras): Promise<any> {\n // if (newTab) {\n // return new Promise(() => Utils.openWindow(router.serializeUrl(router.createUrlTree(commands, navigationExtras))));\n // } else {\n // return router.navigate(commands, navigationExtras);\n // }\n // }\n\n // public static openWindow(url: string = '', target = '_blank', features?: string): Window | null {\n // return window.open(url.match(new RegExp('^/.+')) ? url.replace(new RegExp('^/'), '') : url, target, features); // relative to host\n // }\n\n public static downloadBlob(content: any, mimeType: string, filename: string): void {\n const bom = new Uint8Array([0xef, 0xbb, 0xbf]); // FORM BOM\n const blob = new Blob([bom, content], { type: 'octet/stream' });\n const a = document.createElement('a');\n const url = window.URL.createObjectURL(blob);\n a.setAttribute('href', url);\n a.setAttribute('download', filename);\n a.click();\n URL.revokeObjectURL(url);\n }\n\n public static isValidDate(value: any): value is Date {\n return value instanceof Date && !isNaN(value.getTime());\n }\n \n public static getDateFrom(value?: Date | string | null): Date | undefined {\n if (!value) return undefined;\n else if (value instanceof Date && this.isValidDate(value)) return value;\n else {\n const parsed = new Date(value);\n return this.isValidDate(parsed) ? parsed : undefined;\n }\n }\n \n public static getDateRangeFrom(dateRange: RangeValue<Date | string>): RangeValue<Date> | undefined {\n const firstValue = this.getDateFrom(dateRange.firstValue);\n if (!firstValue) return undefined;\n return {\n ...dateRange,\n firstValue,\n secondValue: dateRange.secondValue ? this.getDateFrom(dateRange.secondValue) : undefined,\n };\n }\n}\n","// enumeration of API endpoints provided by the backend\nexport enum ApiBase {\n core = 'api',\n apiWeb = 'api-web/api',\n predict = 'predict-api/api',\n // TODO: all custom services are deployed using this base\n custom = 'custom',\n none = ''\n}\n","import { Injectable, inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Utils } from '../../util/utils';\nimport { ApiBase } from '../backend/api.enum';\nimport { YuvConfig, YuvConfigLanguages } from './config.interface';\n/**\n * Load and provide configuration for hole apllication while application is inizialized.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigService {\n private translate = inject(TranslateService);\n\n static GLOBAL_RESOURCES = '/resources/config/';\n\n static PARSER(c: any) {\n return c?.resolved || c?.tenant || c?.global || c || {};\n }\n\n static GLOBAL_MAIN_CONFIG(prefix: 'system' | 'admin' | '' = '') {\n return ConfigService.GLOBAL_RESOURCES_PATH('main-config', prefix);\n }\n\n static GLOBAL_MAIN_CONFIG_LANG(iso = 'en', prefix: 'system' | 'admin' | '' = '') {\n return ConfigService.GLOBAL_RESOURCES_PATH('main-config-language-' + iso, prefix);\n }\n\n static GLOBAL_RESOURCES_PATH(section = '', prefix: 'system' | 'admin' | '' = '') {\n return (prefix ? `/${prefix}` : '') + ConfigService.GLOBAL_RESOURCES + encodeURIComponent(section) + '?filter=resolved';\n }\n\n private cfg?: YuvConfig;\n\n /**\n * Set during app init (see CoreInit)\n * @ignore\n */\n set(cfg: YuvConfig) {\n this.cfg = cfg;\n const languages = this.getClientLocales().map((lang) => lang.iso);\n this.translate.addLangs(languages);\n const browserLang = this.translate.getBrowserLang();\n const defaultLang = browserLang && languages.includes(browserLang) ? browserLang : this.getDefaultClientLocale();\n this.translate.setDefaultLang(defaultLang);\n this.translate.use(defaultLang);\n this.extendTranslations(defaultLang);\n }\n\n get(configKey: string): any {\n return configKey ? Utils.getProperty(this.cfg, configKey) : null;\n }\n\n extendTranslations(translations: any, lang = this.translate.currentLang) {\n const allKeys = translations && Object.keys(this.translate.store?.translations[lang] || {});\n if (translations && !Object.keys(translations).every((k) => allKeys.includes(k))) {\n this.translate.setTranslation(lang, translations, true);\n }\n }\n\n extendConfig(configs: YuvConfig[]) {\n this.set(this._mergeConfigs(configs || []));\n }\n\n private _mergeConfigs(configs: any[]) {\n return configs.reduce((acc, x) => {\n // merge object values on 2nd level\n Object.keys(x).forEach((k) => (!acc[k] || Array.isArray(x[k]) || typeof x[k] !== 'object' ? (acc[k] = x[k]) : Object.assign(acc[k], x[k])));\n return acc;\n }, {});\n }\n\n /**\n * Getter for the available client locales\n * @returns available client locales\n */\n getClientLocales(): YuvConfigLanguages[] {\n return this._getCoreConfig('languages');\n }\n\n getApiBase(api: string = ApiBase.apiWeb, origin = false): string {\n api = api || ApiBase.none;\n const href = api === ApiBase.none ? api : `/${api}`;\n const host = (origin && location.origin) || '';\n return href.startsWith('http') ? href : host + href;\n }\n\n /**\n * Get the default client locale\n * @returns ISO string of the locale\n */\n getDefaultClientLocale() {\n const lang = this.getClientLocales().find((_) => _.fallback);\n return lang ? lang.iso : 'en';\n }\n\n private _getCoreConfig(key: string): any {\n return this.cfg ? (this.cfg.core as any)[key] : undefined;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ConfigService } from '../config/config.service';\nimport { ILogger } from './logger.interface';\n/**\n * @ignore\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class Logger implements ILogger {\n constructor(private config: ConfigService) { }\n\n private styles: { [level: string]: string } = {\n info: 'color:blue',\n debug: 'background: orange',\n warn: 'background: rgba(255,0,0,.2);color: red',\n error: 'background: red; color: #fff'\n };\n\n private apply(fn: string, args: any) {\n args = [`%c${fn}:`, 'font-family: monospace; font-size: 10px; padding: 2px 4px;' + this.styles[fn], ...args];\n return this.shouldLog(fn) ? console && (console as any)[fn] && (console as any)[fn](...args) : null;\n }\n\n public debug(...args: any[]): void {\n this.apply('debug', args);\n }\n\n public error(...args: any[]): void {\n this.apply('error', args);\n }\n\n public info(...args: any[]): void {\n this.apply('info', args);\n }\n\n public log(...args: any[]): void {\n this.apply('log', args);\n }\n\n public warn(...args: any[]): void {\n this.apply('warn', args);\n }\n\n private shouldLog(level: string) {\n let should = false;\n const cfg = this.config.get('core.logging');\n if (!cfg || !cfg.level) return false;\n\n switch (cfg.level) {\n case 'debug': {\n should = true;\n break;\n }\n case 'error': {\n should = ['error'].includes(level);\n break;\n }\n case 'warn': {\n should = ['warn', 'error'].includes(level);\n break;\n }\n case 'info': {\n should = ['info', 'warn', 'error'].includes(level);\n break;\n }\n default: {\n }\n }\n return should;\n }\n}\n","import { HttpClient, HttpHeaders, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { catchError, finalize, shareReplay, tap } from 'rxjs/operators';\nimport { ConfigService } from '../config/config.service';\nimport { ApiBase } from './api.enum';\nimport { HttpDeleteOptions, HttpOptions } from './backend.interface';\nimport { Logger } from '../logger/logger.service';\n\n/**\n * Service for http communication with the yuuvis Momentum backend. Apps \n * should use this service to communicate with the backend instead of default\n * httpClient because required headers are managed and apps do not have\n * to care about preqrequisits.\n * \n */\n@Injectable({ providedIn: 'root' })\nexport class BackendService {\n #http = inject(HttpClient);\n #logger = inject(Logger);\n configService = inject(ConfigService);\n\n #cache = new Map<string, any>();\n #temp = new Map<string, Observable<any>>();\n #headers = new HttpHeaders({\n 'Content-Type': 'application/json'\n });\n\n /**\n * OpenIdConnect authorization headers\n */\n getAuthHeaders() {\n return new HttpHeaders();\n }\n\n /**\n * Add a new header.\n * @param key The headers name\n * @param value The value to be added to the headers. Setting this to null\n * will remove the header\n */\n setHeader(key: string, value: string) {\n if (value && value.length) {\n this.#headers = this.#headers.set(key, value);\n } else {\n this.#headers = this.#headers.delete(key);\n }\n }\n\n /**\n * Wrapped HTTP GET method\n * @param uri The REST URI to be queried\n * @param base The Base URI (backend service) to be used\n * @param requestOptions Additional request options\n * @returns The data retrieved from the given endpoint\n */\n get(uri: string, base?: string, requestOptions?: HttpOptions): Observable<any> {\n return this.#http.get(this.getApiBase(base) + uri, this.getHttpOptions(requestOptions));\n }\n\n /**\n * Wrapped HTTP POST method\n * @param uri The target REST URI\n * @param data Data to be 'posted'\n * @param base The Base URI (backend service) to be used\n * @param requestOptions Additional request options\n * @returns The return value of the target POST endpoint\n */\n public post(uri: string, data?: any, base?: string, requestOptions?: HttpOptions): Observable<any> {\n const baseUri = this.getApiBase(base);\n const payload = data && typeof data === 'object' ? JSON.stringify(data) : data || '';\n return this.#http.post(`${baseUri}${uri}`, payload, this.getHttpOptions(requestOptions));\n }\n\n /**\n * Performs a multipart form data POST request.\n * @param uri The target REST URI\n * @param formData FormData to be 'posted'\n * @param base The Base URI (backend service) to be used\n * @param requestOptions Additional request options (see HttpRequest for details)\n * @returns The return value of the target POST endpoint\n */\n public postMultiPart(uri: string, formData: FormData, base?: string, requestOptions?: any): Observable<any> {\n // Creating a multipart/form-data request like this ensures that the Content-Type is set correctly including\n // the multipart boundary which is required by the server to parse the request.\n // If we would set the Content-Type header to multipart/form-data manually the boundary would be missing\n // and the request would fail.\n // As our post method already sets the Content-Type to application/json we can't use it for multipart requests.\n const req = new HttpRequest('POST', `${this.getApiBase(base)}${uri}`, formData, requestOptions);\n return this.#http.request(req);\n }\n\n /**\n * Wrapped HTTP PATCH method\n * @param uri The target REST URI\n * @param data Data to be 'patched'\n * @param base The Base URI (backend service) to be used\n * @param requestOptions Additional request options\n * @returns The return value of the target PATCH endpoint\n */\n public patch(uri: string, data?: any, base?: string, requestOptions?: HttpOptions): Observable<any> {\n const baseUri = this.getApiBase(base);\n const payload = data ? JSON.stringify(data) : '';\n return this.#http.patch(`${baseUri}${uri}`, payload, this.getHttpOptions(requestOptions));\n }\n\n /**\n * Wrapped HTTP PUT method\n * @param uri The target REST URI\n * @param data Data to be 'posted'\n * @param base The Base URI (backend service) to be used\n * @param requestOptions Additional request options\n * @returns The return value of the target PUT endpoint\n */\n public put(uri: string, data?: any, base?: string, requestOptions?: HttpOptions): Observable<any> {\n return this.#http.put(this.getApiBase(base) + uri, data, this.getHttpOptions(requestOptions));\n }\n\n /**\n * Wrapped HTTP DELETE method\n * @param uri The target REST URI\n * @param base The Base URI (backend service) to be used\n * @param requestOptions Additional request options\n * @returns The return value of the target DELETE endpoint\n */\n public delete(uri: string, base?: string, requestOptions?: HttpDeleteOptions): Observable<any> {\n return this.#http.delete(this.getApiBase(base) + uri, this.getHttpOptions(requestOptions));\n }\n\n /**\n * @ignore\n * Cache for small requests like icons and configs\n *\n * @param string uri\n * @returns Observable<any>\n */\n public getViaCache(uri: string): Observable<any> {\n if (this.#cache.has(uri)) {\n return of(this.#cache.get(uri));\n } else {\n const requestOptions: any = {\n responseType: 'text',\n headers: this.getAuthHeaders()\n };\n return this.getViaTempCache(uri, () => this.#http.get(uri, requestOptions).pipe(tap((text) => this.#cache.set(uri, text))));\n }\n }\n\n /**\n * @ignore\n * Temporary Cache for multiple identical requests\n *\n * @param string id\n * @param Function request\n * @returns Observable<any>\n */\n public getViaTempCache(id: string, request?: () => Observable<object>): Observable<any> {\n if (this.#temp.has(id)) {\n return this.#temp.get(id)!;\n } else {\n const resp = (request ? request() : this.get(id)).pipe(\n finalize(() => this.#temp.delete(id)),\n shareReplay(1)\n );\n this.#temp.set(id, resp);\n return resp;\n }\n }\n\n public download(uri: string, filename?: string) {\n if (document && document.body) {\n const a = document.createElement('a');\n a.setAttribute('href', uri);\n a.style.display = 'none';\n a.setAttribute('download', filename || 'download');\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n } else {\n this.#logger.error('Environment not supported. Downloading contents relies on a DOM being available.');\n }\n }\n\n /**\n * Gets the base URI for an API endpoint\n * @param api The API to get the base URI for. Leaving this blank will return\n * base URI for the web API\n * @param origin The flag to include location origin\n * @returns Base URI for the given API.\n */\n getApiBase(api: string = ApiBase.apiWeb, origin = false): string {\n return this.configService.getApiBase(api, origin);\n }\n\n /**\n * @ignore\n */\n getHttpOptions(requestOptions?: HttpOptions): HttpOptions {\n // Object.entries(this.getAuthHeaders()).forEach(([h, v]) => this.setHeader(h, v as string));\n this.getAuthHeaders()\n .keys()\n .forEach((k) => this.setHeader(k, this.getAuthHeaders().get(k)!));\n return Object.assign({ headers: this.#headers }, requestOptions);\n }\n\n /**\n * Batch service\n */\n batch(requests: { method?: string; uri: string; body?: any; base?: string; requestOptions?: HttpOptions }[]) {\n const httpRequests = requests.map((r) =>\n (this as any)[(r.method || 'get').toLowerCase()]\n .apply(\n this,\n [r.uri, r.body, r.base, r.requestOptions].filter((a) => a)\n )\n .pipe(catchError((err) => of({ _error: err })))\n );\n return forkJoin(httpRequests) as Observable<any[]>;\n }\n}\n","import { ContentStream, CoreApiObject } from '../dms/dms.service.interface';\n\nexport type DateRange = 'today' | 'yesterday' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth' | 'thisYear' | 'lastYear';\nexport type FilesizeRange = 'small' | 'medium' | 'large' | 'verylarge';\n\nexport interface SearchQuery {\n // -- Fulltext --\n // Search term\n term?: string;\n // where to search\n scope?: 'metadata' | 'content';\n\n // -- Pagination --\n // Number of items to return\n size?: number;\n // Number of items to skip (offset)\n from?: number;\n\n // -- Fields --\n // Object fields to return\n fields?: string[];\n\n // -- Aggregations --\n // Aggregations to return\n aggs?: string[];\n\n // -- Object Types --\n // Object types (incl. SOTs) to search for\n types?: string[];\n\n // -- Filters --\n // Filter by field\n filters?: SearchFilter[];\n // filters to be applied to table columns\n tableFilters?: TableFilter[];\n\n // -- Sort --\n // Sort by field\n sort?: SortOption[];\n includePermissions?: boolean;\n}\n\nexport interface SortOption {\n field: string;\n order: 'asc' | 'desc';\n}\n\nexport interface SearchFilter {\n // field to filter by\n f: string;\n o: Operator;\n // value for the filter\n v1: unknown;\n // optional second value for interval filters\n v2?: unknown;\n // whether to negate the filter\n useNot?: boolean;\n}\n\nexport interface TableFilter {\n table: string;\n columnFilters: SearchFilter[];\n}\n\nexport enum Operator {\n EQUAL = 'eq', // equal\n EEQUAL = 'eeq', // exact equal\n IN = 'in', // match at least one of the provided values (value has to be an array)\n GREATER_THAN = 'gt', // greater than\n GREATER_OR_EQUAL = 'gte', // greater than or equal\n LESS_THAN = 'lt', // less than\n LESS_OR_EQUAL = 'lte', // less than or equal\n INTERVAL = 'gtlt', // interval\n INTERVAL_INCLUDE_BOTH = 'gtelte', // interval include left and right\n INTERVAL_INCLUDE_TO = 'gtlte', // interval include right\n INTERVAL_INCLUDE_FROM = 'gtelt', // interval include left\n RANGE = 'rg', // aggegation ranges\n LIKE = 'like', // like\n CONTAINS = 'contains' // contains\n}\nexport const OperatorLabel = {\n /** equal */\n EQUAL: '=',\n /** exact equal */\n EEQUAL: '==',\n /** match at least one of the provided values (value has to be an array) */\n IN: '~',\n /** greater than */\n GREATER_THAN: '>',\n /** greater than or equal */\n GREATER_OR_EQUAL: '≽', //\n LESS_THAN: '<', // less than\n LESS_OR_EQUAL: '≼', // less than or equal\n INTERVAL: '<>', // interval\n INTERVAL_INCLUDE_BOTH: '-', // interval include left and right\n INTERVAL_INCLUDE_TO: '>-', // interval include right\n INTERVAL_INCLUDE_FROM: '-<', // interval include left\n RANGE: '=', // aggegation ranges\n LIKE: '~', // like\n CONTAINS: '~' // contains\n};\n\n// ---------------------------------------------------------------------------------\n// ---------------------------------------------------------------------------------\n// ---------------------------------------------------------------------------------\n// ---------------------------------------------------------------------------------\n// ---------------------------------------------------------------------------------\n// ---------------------------------------------------------------------------------\n\nexport interface SearchResponse {\n hasMoreItems: boolean;\n numItems: number;\n totalNumItems: number;\n objects: CoreApiObject[];\n}\n\n/**\n * Interface providing a search service\n */\nexport interface SearchResult {\n hasMoreItems: boolean;\n totalNumItems: number;\n items: SearchResultItem[];\n // object types within the result\n objectTypes: string[];\n // current page of the search result.\n paging?: {\n page: number;\n totalPages: number;\n };\n}\n/**\n * Interface for the item of search results\n */\nexport interface SearchResultItem {\n objectTypeId: string;\n content?: SearchResultContent;\n permissions?: SearchResultPermissions;\n fields: Map<string, any>;\n}\n\nexport interface SearchResultPermissions {\n read: Array<'metadata' | 'content'>;\n write: Array<'metadata' | 'content'>;\n delete: Array<'object' | 'content'>;\n}\n\nexport type SearchResultContent = ContentStream;\n// /**\n// * Interface providing search query properties, that can be send to\n// * the search service\n// */\n// export interface SearchQueryProperties {\n// term?: string;\n// size?: number;\n// fields?: string[];\n// from?: number;\n// aggs?: string[];\n// maxItems?: number;\n// types?: string[]; // mixed list of primary and secondary object types\n// lots?: string[]; // list of leading object types\n// filters?: any;\n// hiddenFilters?: any; // hidden filters that will be combined with SearchQuery filters via search service\n// tableFilters?: any; // table filters that allows to search complex queries\n// sort?: any;\n// tags?: any;\n// scope?: 'all' | 'metadata' | 'content';\n// }\n\n/**\n * Interface providing the estimated result of the current query.\n */\nexport interface AggregateResult {\n /**\n * number of results found\n */\n totalNumItems: number;\n aggregations: Aggregation[];\n}\n\nexport interface AggregationEntry {\n key: string;\n count: number;\n}\n\n/**\n * Property of a one search query aggregation\n */\nexport interface Aggregation {\n aggKey: string;\n entries: AggregationEntry[];\n}\n","import { inject, Injectable } from '@angular/core';\nimport { StorageMap } from '@ngx-pwa/local-storage';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { first, map, switchMap } from 'rxjs/operators';\n\n/**\n * Service for saving or caching data on the users device. It uses the most efficient storage\n * available (IndexDB, localstorage, ...) on the device. Depending on the type of storage used,\n * its limitations apply.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AppCacheService {\n #storage = inject(StorageMap);\n\n setItem(key: string, value: any): Observable<boolean> {\n return this.#storage.set(key, value).pipe(map(() => true));\n }\n\n getItem(key: string): Observable<any> {\n return this.#storage.get(key);\n }\n\n removeItem(key: string): Observable<boolean> {\n return this.#storage.delete(key).pipe(map(() => true));\n }\n\n clear(filter?: (key: any) => boolean): Observable<boolean> {\n return filter\n ? this.getStorageKeys().pipe(\n switchMap((keys) => {\n const list = keys.filter((k: any) => filter(k)).map((k: any) => this.removeItem(k));\n return list.length ? forkJoin(list).pipe(map(() => true)) : of(true);\n })\n )\n : this.#storage.clear().pipe(map(() => true));\n }\n\n getStorageKeys(): Observable<string[]> {\n return new Observable<string[]>((observer) => {\n const keys: string[] = [];\n this.#storage.keys().subscribe({\n next: (key) => keys.push(key),\n complete: () => observer.next(keys)\n });\n }).pipe(first());\n }\n\n setStorage(options: any): Observable<any> {\n return forkJoin(Object.keys(options || {}).map((k) => this.setItem(k, options[k])));\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { forkJoin, Observable, of, ReplaySubject } from 'rxjs';\nimport { catchError, filter, map, switchMap, tap } from 'rxjs/operators';\nimport { Utils } from '../../util/utils';\nimport { ApiBase } from '../backend/api.enum';\nimport { BackendService } from '../backend/backend.service';\nimport { AppCacheService } from '../cache/app-cache.service';\nimport { Logger } from '../logger/logger.service';\nimport { AuthData } from './../auth/auth.service';\nimport { BaseObjectTypeField, Classification, ContentStreamAllowed, InternalFieldType, ObjectTypeClassification, SystemType } from './system.enum';\nimport {\n ClassificationEntry,\n GenericObjectType,\n Localization,\n ObjectType,\n ObjectTypeField,\n ObjectTypePermissions,\n Relationship,\n SchemaResponse,\n SchemaResponseFieldDefinition,\n SchemaResponseTypeDefinition,\n SecondaryObjectType,\n SystemDefinition\n} from './system.interface';\nimport { ObjectTypeFieldInternalType, ObjectTypeFieldType } from '../object-form/object-form.interface';\n\n/**\n * Providing system definitions.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SystemService {\n #backend = inject(BackendService);\n #appCache = inject(AppCacheService);\n #logger = inject(Logger);\n\n #STORAGE_KEY = 'yuv.core.system.definition';\n #STORAGE_KEY_AUTH_DATA = 'yuv.core.auth.data';\n #STORAGE_KEY_FORMS = 'yuv.core.forms__';\n // cached icons to avoid backend calls (session cache)\n #iconCache: {\n [objectTypeId: string]: {\n uri: string;\n icon?: string;\n };\n } = {};\n #resolvedClassificationsCache: { [objectTypeId: string]: any } = {};\n\n system?: SystemDefinition;\n #systemSource = new ReplaySubject<SystemDefinition>();\n system$: Observable<SystemDefinition> = this.#systemSource.asObservable();\n\n // cache for resolved visible tags because they are used in lists and therefore should not be re-evaluated all the time\n #visibleTagsCache: { [objectId: string]: { [tagName: string]: any[] } } = {};\n #permissions?: ObjectTypePermissions;\n authData?: AuthData;\n\n /**\n * Get all object types\n * @param withLabels Whether or not to also add the types labels\n */\n getObjectTypes(withLabels?: boolean, situation?: 'search' | 'create'): GenericObjectType[] {\n // Filter by user permissions based on situation\n const objectTypes = this.#filterByPermissions(\n [...this.system!.objectTypes, ...this.system!.secondaryObjectTypes.map((sot) => this.#sotToGenericType(sot))],\n situation\n ) as GenericObjectType[];\n return withLabels ? objectTypes.map((t) => ({ ...t, label: this.getLocalizedResource(`${t.id}_label`) })) : objectTypes;\n }\n\n #sotToGenericType(sot: SecondaryObjectType): GenericObjectType {\n return {\n ...sot,\n isFolder: false,\n creatable: true,\n secondaryObjectTypes: [],\n isSot: true\n };\n }\n\n /**\n * Get all secondary object types\n * @param withLabels Whether or not to also add the types labels\n */\n getSecondaryObjectTypes(withLabels?: boolean, situation?: 'search' | 'create'): SecondaryObjectType[] {\n const sots = this.#filterByPermissions(\n this.system!.secondaryObjectTypes.map((sot) => this.#sotToGenericType(sot)),\n situation\n ) as SecondaryObjectType[];\n\n return (\n (withLabels ? sots.map((t) => ({ ...t, label: this.getLocalizedResource(`${t.id}_label`) })) : sots)\n // ignore\n .filter((t) => t.id !== t.baseId && !t.id.startsWith('system:') && t.id !== 'appClientsystem:leadingType')\n );\n }\n\n #filterByPermissions(types: GenericObjectType[], situation?: 'search' | 'create'): GenericObjectType[] {\n if (!situation) return types;\n const allowedTypes = situation === 'search' ? this.#permissions!.searchableObjectTypes : this.#permissions!.createableObjectTypes;\n return types.filter((t) => allowedTypes.includes(t.id));\n }\n\n /**\n * Get a particular object type\n * @param objectTypeId ID of the object type\n * @param withLabel Whether or not to also add the types label\n */\n getObjectType(objectTypeId: string, withLabel?: boolean): GenericObjectType | undefined {\n let objectType: GenericObjectType | undefined =\n objectTypeId === SystemType.OBJECT ? this.getBaseType() : this.system!.objectTypes.find((ot) => ot.id === objectTypeId);\n\n if (objectType && withLabel) {\n objectType.label = this.getLocalizedResource(`${objectType.id}_label`) || objectTypeId;\n }\n\n if (!objectType) {\n // no 'real' object type found. Try to find a matching SOT and treat it like a real type\n // by filling up the missing properties\n const sot = this.getSecondaryObjectType(objectTypeId, withLabel);\n if (sot) {\n objectType = this.#sotToGenericType(sot);\n }\n }\n return objectType;\n }\n\n /**\n * Get a particular secondary object type\n * @param objectTypeId ID of the object type\n * @param withLabel Whether or not to also add the types label\n */\n getSecondaryObjectType(objectTypeId: string, withLabel?: boolean): SecondaryObjectType | undefined {\n const objectType: SecondaryObjectType | undefined = this.system!.secondaryObjectTypes.find((ot) => ot.id === objectTypeId);\n if (objectType && withLabel) {\n objectType.label = this.getLocalizedResource(`${objectType.id}_label`) || objectType.id;\n }\n return objectType;\n }\n\n getRelationship(id: string, withLabel?: boolean): Relationship | undefined {\n const relationship: Relationship | undefined = this.system!.relationships.find((r) => r.id === id);\n if (relationship && withLabel) {\n relationship.label = this.getLocalizedResource(`${relationship.id}_label`) || relationship.id;\n }\n return relationship;\n }\n\n /**\n * Get the base document type all documents belong to\n * @param withLabel Whether or not to also add the types label\n */\n getBaseDocumentType(withLabel?: boolean): ObjectType {\n return this.getObjectType(SystemType.DOCUMENT, withLabel)!;\n }\n\n /**\n * Get the base folder type all folders belong to\n * @param withLabel Whether or not to also add the types label\n */\n getBaseFolderType(withLabel?: boolean): ObjectType {\n return this.getObjectType(SystemType.FOLDER, withLabel)!;\n }\n\n /**\n * Get the base object type all dms objects belong to\n */\n getBaseType(): ObjectType {\n const sysFolder = this.getBaseFolderType();\n const sysDocument = this.getBaseDocumentType();\n\n // base type contains only fields that are shared by base document and base folder ...\n const folderTypeFieldIDs = sysFolder.fields.map((f) => f.id);\n const baseTypeFields: ObjectTypeField[] = sysDocument.fields.filter((f) => folderTypeFieldIDs.includes(f.id));\n\n return {\n id: SystemType.OBJECT,\n creatable: false,\n isFolder: false,\n secondaryObjectTypes: [],\n fields: baseTypeFields\n // rawFields: baseTypeFields\n };\n }\n\n /**\n * Get the resolved object type with all fields ( including fields from related secondary types )\n */\n getResolvedType(objectTypeId?: string): { id: string; fields: ObjectTypeField[] } {\n const abstractTypes = Object.values(SystemType);\n if (!objectTypeId || abstractTypes.includes(objectTypeId)) {\n const baseType = this.getBaseType();\n return { id: baseType.id, fields: baseType.fields };\n }\n\n const ot = this.getObjectType(objectTypeId);\n if (!ot) {\n const sot = this.getSecondaryObjectType(objectTypeId) || { id: objectTypeId, fields: [] };\n const baseType = this.getBaseType();\n return {\n id: sot.id,\n fields: [...sot.fields, ...baseType.fields]\n };\n }\n\n return {\n id: ot.id,\n fields: ot.fields\n };\n }\n\n /**\n * Get the resolved object tags\n */\n getResolvedTags(objectTypeId: string): { id: string; tagName: string; tagValues: any; fields: ObjectTypeField[] }[] {\n const vTags = this.getVisibleTags(objectTypeId);\n return Object.keys(vTags).map((k) => ({\n id: objectTypeId,\n tagName: k,\n tagValues: vTags[k],\n fields: this.getBaseType().fields.filter((f) => f.id === BaseObjectTypeField.TAGS)\n }));\n }\n\n /**\n * Get a list of classifications for a given object type including the\n * classifications of its static secondary object types\n * @param objectTypeId ID of the object type\n */\n getResolvedClassifications(objectTypeId: string): string[] {\n return this.#resolvedClassificationsCache[objectTypeId] || this.#resolveClassifications(objectTypeId);\n }\n\n #resolveClassifications(objectTypeId: string): string[] {\n let classifications: string[] = [];\n const ot = this.getObjectType(objectTypeId);\n if (ot) {\n classifications = ot.classification || [];\n const staticSOTs: string[] = ot.secondaryObjectTypes ? ot.secondaryObjectTypes.filter((sot) => sot.static).map((sot) => sot.id) : [];\n staticSOTs.forEach((id) => {\n const sot = this.getSecondaryObjectType(id);\n classifications = sot?.classification\n ? [\n ...classifications,\n ...sot.classification.filter((c) => {\n // also filter classifications that should not be inherited\n return c !== ObjectTypeClassification.CREATE_FALSE && c !== ObjectTypeClassification.SEARCH_FALSE;\n })\n ]\n : classifications;\n });\n this.#resolvedClassificationsCache[objectTypeId] = classifications;\n }\n return classifications;\n }\n\n /**\n * Visible tags are defined by a classification on the object type (e.g. 'tag[tenkolibri:process,1,2,3]').\n *\n * The example will only return tags with the name 'tenkolibri:process'\n * and values of either 1, 2 or 3. All other tags will be ignored.\n *\n * @param objectTypeId ID of the object type to get the visible tags for\n * @returns object where the property name is the name of the tag and its value are the visible values\n * for that tag (if values is emoty all values are allowed)\n */\n getVisibleTags(objectTypeId: string): { [tagName: string]: any[] } {\n return this.#visibleTagsCache[objectTypeId] || this.fetchVisibleTags(objectTypeId);\n }\n\n private fetchVisibleTags(objectTypeId: string): { [tagName: string]: any[] } {\n const ot = this.getObjectType(objectTypeId) || this.getSecondaryObjectType(objectTypeId);\n const tagClassifications = this.getResolvedClassifications(objectTypeId).filter((t) => t.startsWith('tag['));\n const parentType = ot && (ot as ObjectType).id;\n\n const to: { [tagName: string]: any[] } = {};\n (tagClassifications || []).forEach((tag) => {\n const m = tag.match(/\\[(.*)\\]/i)![1].split(',');\n const tagName = m.splice(0, 1)[0];\n const tagValues = m.map((v) => parseInt(v.trim()));\n to[tagName] = tagValues;\n });\n\n this.#visibleTagsCache[objectTypeId] = parentType ? { ...this.getVisibleTags(parentType), ...to } : to;\n return this.#visibleTagsCache[objectTypeId];\n }\n\n filterVisibleTags(objectTypeId: string, tagsValue: Array<Array<any>>): Array<Array<any>> {\n if (!tagsValue) return [];\n const vTags: { [tagName: string]: any[] } = this.getVisibleTags(objectTypeId);\n // Tag value looks like this: [tagName: string, state: number, date: Date, traceId: string]\n return tagsValue.filter((v: any[]) => !!vTags[v[0]] && vTags[v[0]].includes(v[1]));\n }\n\n /**\n * Get the icon for an object type. This will return an SVG as a string.\n * @param objectTypeId ID of the object type\n * @param fallback ID of a fallback icon that should be used if the given object type has no icon yet\n */\n getObjectTypeIcon(objectTypeId: string, fallback?: string): Observable<string> {\n if (this.#iconCache[objectTypeId] && this.#iconCache[objectTypeId].icon) {\n return of(this.#iconCache[objectTypeId].icon!);\n } else {\n const iconUri = this.getObjectTypeIconUri(objectTypeId, fallback);\n return this.#backend\n .get(iconUri, ApiBase.none, {\n responseType: 'text'\n })\n .pipe(tap((icon) => (this.#iconCache[objectTypeId] = { uri: iconUri, icon })));\n }\n }\n\n /**\n * Get the URI of an object type icon.\n * @param objectTypeId ID of the object type\n * @param fallback ID of a fallback icon that should be used if the given object type has no icon yet\n */\n getObjectTypeIconUri(objectTypeId: string, fallback?: string): string {\n if (this.#iconCache[objectTypeId]) {\n return this.#iconCache[objectTypeId].uri;\n } else {\n const ci = this.#getIconFromClassification(objectTypeId);\n const fb = this.getFallbackIcon(objectTypeId, fallback);\n const uri = `/resources/icons/${encodeURIComponent(ci || objectTypeId)}${fb ? `?fallback=${encodeURIComponent(fb)}` : ''}`;\n this.#iconCache[objectTypeId] = { uri: `${this.#backend.getApiBase(ApiBase.apiWeb)}${uri}` };\n return this.#iconCache[objectTypeId].uri;\n }\n }\n\n private getFallbackIcon(objectTypeId: string, fallback?: string): string {\n const ot = this.getObjectType(objectTypeId);\n if (ot && !fallback) {\n // add default fallbacks for system:document and system:folder if now other fallback has been provided\n fallback = ot.isFolder ? 'system:folder' : 'system:document';\n // if (this.isFloatingObjectType(ot)) {\n // // types that do not have no object type assigned to them (primary FSOTs)\n // fallback = 'system:dlm';\n // }\n }\n return fallback!;\n }\n\n #getIconFromClassification(objectTypeId: string) {\n const ce: Map<string, ClassificationEntry> = this.getClassifications(this.getResolvedClassifications(objectTypeId));\n return ce.has(ObjectTypeClassification.OBJECT_TYPE_ICON) ? ce.get(ObjectTypeClassification.OBJECT_TYPE_ICON)!.options[0] : null;\n }\n\n getLocalizedResource(key: string): string {\n try {\n return this.system!.i18n[key];\n } catch (error) {\n return key;\n }\n }\n\n getLocalizedLabel(id: string) {\n return this.getLocalizedResource(`${id}_label`);\n }\n\n getLocalizedDescription(id: string) {\n return this.getLocalizedResource(`${id}_description`);\n }\n\n /**\n * Determine whether or not the given object type field is a system field\n * @param field Object type field to be checked\n */\n isSystemProperty(field: ObjectTypeField): boolean {\n return field.id.startsWith('system:');\n }\n\n /**\n * Fetches the backends system definition and updates system$ Observable.\n * Subscribe to the system$ observable instead of calling this function, otherwise you'll trigger fetching the\n * system definition every time.\n *\n * @param user The user to load the system definition for\n */\n getSystemDefinition(authData?: AuthData): Observable<boolean> {\n this.#clearObjectTypeFormCache();\n\n // TODO: Supposed to return 304 if nothing changes\n return this.#fetchSystemDefinition(authData);\n\n // TODO: remove when 304 is there???\n // // try to fetch system definition from cache first\n // return this.appCache.getItem(this.STORAGE_KEY).pipe(\n // switchMap(res => {\n // if (res) {\n // // check if the system definition from the cache is up to date\n // this.system = res;\n // this.systemSource.next(this.system);\n // return of(true);\n // } else {\n // // nothing cached so far\n // return this.fetchSystemDefinition();\n // }\n // })\n // );\n }\n\n /**\n * Actually fetch the system definition from the backend.\n * @param user User to fetch definition for\n */\n #fetchSystemDefinition(authData?: AuthData): Observable<boolean> {\n return (authData ? of(authData) : this.#appCache.getItem(this.#STORAGE_KEY_AUTH_DATA)).pipe(\n switchMap((data: AuthData) => {\n this.updateAuthData(data).subscribe();\n const fetchTasks = [this.#backend.get('/dms/schema/native.json', ApiBase.core), this.#fetchLocalizations()];\n return forkJoin(fetchTasks);\n }),\n catchError((error) => {\n this.#logger.error('Error fetching recent version of system definition from server.', error);\n this.#systemSource.error('Error fetching recent version of system definition from server.');\n return of(null);\n }),\n map((data) => {\n if (data?.length) {\n this.setSchema(data[0], data[1]);\n }\n return !!data;\n })\n );\n }\n\n setPermissions(p: ObjectTypePermissions) {\n this.#permissions = p;\n }\n\n /**\n * Create the schema from the servers schema response\n * @param schemaResponse Response from the backend\n */\n setSchema(schemaResponse: SchemaResponse, localizedResource: Localization = {}) {\n // prepare a quick access object for the fields\n const propertiesQA: Record<string, SchemaResponseFieldDefinition> = {};\n const orgTypeFields = [BaseObjectTypeField.MODIFIED_BY, BaseObjectTypeField.CREATED_BY];\n schemaResponse.propertyDefinition.forEach((p: any) => {\n p.classifications = p.classification;\n // TODO: Remove once schema supports organization classification for base params\n // map certain fields to organization type (fake it until you make it ;-)\n if (orgTypeFields.includes(p.id)) {\n p.classifications = [Classification.STRING_ORGANIZATION];\n }\n propertiesQA[p.id] = p;\n });\n // prepare a quick access object for object types (including secondary objects)\n const objectTypesQA: { [id: string]: SchemaResponseTypeDefinition } = {};\n schemaResponse.typeFolderDefinition.forEach((ot: any) => {\n objectTypesQA[ot.id] = ot;\n });\n schemaResponse.typeDocumentDefinition.forEach((ot: any) => {\n objectTypesQA[ot.id] = ot;\n });\n schemaResponse.typeSecondaryDefinition.forEach((sot: any) => {\n objectTypesQA[sot.id] = sot;\n });\n\n const objectTypes: ObjectType[] = [\n // folder types\n ...schemaResponse.typeFolderDefinition.map((fd) => ({\n id: fd.id,\n description: fd.description,\n classification: fd.classification,\n baseId: fd.baseId,\n creatable: this.#isCreatable(fd.id),\n contentStreamAllowed: ContentStreamAllowed.NOT_ALLOWED,\n isFolder: true,\n secondaryObjectTypes: fd.secondaryObjectTypeId ? fd.secondaryObjectTypeId.map((t) => ({ id: t.value, static: t.static })) : [],\n fields: this.#resolveObjectTypeFields(fd, propertiesQA, objectTypesQA)\n // rawFields: this.resolveObjectTypeFields(fd, propertiesQA, objectTypesQA, true),\n })),\n // document types\n ...schemaResponse.typeDocumentDefinition.map((dd) => ({\n id: dd.id,\n description: dd.description,\n classification: dd.classification,\n baseId: dd.baseId,\n creatable: this.#isCreatable(dd.id),\n contentStreamAllowed: dd.contentStreamAllowed,\n isFolder: false,\n secondaryObjectTypes: dd.secondaryObjectTypeId ? dd.secondaryObjectTypeId.map((t) => ({ id: t.value, static: t.static })) : [],\n fields: this.#resolveObjectTypeFields(dd, propertiesQA, objectTypesQA)\n // rawFields: this.resolveObjectTypeFields(dd, propertiesQA, objectTypesQA, true),\n }))\n ];\n\n const secondaryObjectTypes: SecondaryObjectType[] = schemaResponse.typeSecondaryDefinition.map((std) => ({\n id: std.id,\n description: std.description,\n classification: std.classification,\n contentStreamAllowed: std.contentStreamAllowed,\n baseId: std.baseId,\n // TODO: Could a SOT be a folder too?\n isFolder: false,\n fields: this.#resolveObjectTypeFields(std, propertiesQA, objectTypesQA)\n }));\n\n const relationships: Relationship[] = (schemaResponse.typeRelationshipDefinition || []).map((std) => ({\n id: std.id,\n description: std.description,\n baseId: std.baseId,\n fields: this.#resolveObjectTypeFields(std, propertiesQA, objectTypesQA),\n // allowedSourceType\n allowedSourceTypes: std.allowedSourceType.map((t) => t.objectTypeReference),\n allowedTargetTypes: std.allowedTargetType.map((t) => t.objectTypeReference)\n }));\n\n this.system = {\n version: schemaResponse.version,\n lastModificationDate: schemaResponse.lastModificationDate,\n objectTypes,\n secondaryObjectTypes,\n relationships,\n i18n: localizedResource,\n allFields: propertiesQA\n };\n this.#appCache.setItem(this.#STORAGE_KEY, this.system).subscribe();\n this.#systemSource.next(this.system);\n }\n\n /**\n * Resolve all the fields for an object type. This also includes secondary object types and the fields inherited from\n * the base type (... and of course the base type (and its secondary object types) of the base type and so on)\n * @param schemaTypeDefinition object type definition from the native schema\n * @param propertiesQA Quick access object of all properties\n * @param objectTypesQA Quick access object of all object types\n * @param raw If set to 'true' only the properties of the object type itself will be returned (without SOTs)\n */\n #resolveObjectTypeFields(\n schemaTypeDefinition: SchemaResponseTypeDefinition,\n propertiesQA: { [id: string]: SchemaResponseFieldDefinition },\n objectTypesQA: { [id: string]: SchemaResponseTypeDefinition }\n ): ObjectTypeField[] {\n const objectTypeFieldIDs = schemaTypeDefinition.propertyReference.map((pr) => pr.value);\n if (schemaTypeDefinition.secondaryObjectTypeId) {\n schemaTypeDefinition.secondaryObjectTypeId\n .filter((sot) => sot.static)\n .map((sot) => sot.value)\n .forEach((sotID) => objectTypesQA[sotID].propertyReference.forEach((pr: { value: string }) => objectTypeFieldIDs.push(pr.value)));\n }\n\n let fields: ObjectTypeField[] = objectTypeFieldIDs.map((id) => ({\n ...propertiesQA[id],\n _internalType: this.getInternalFormElementType(propertiesQA[id].propertyType, propertiesQA[id].classifications)\n }));\n\n // also resolve properties of the base type\n if (schemaTypeDefinition.baseId !== schemaTypeDefinition.id && !!objectTypesQA[schemaTypeDefinition.baseId]) {\n fields = fields.concat(this.#resolveObjectTypeFields(objectTypesQA[schemaTypeDefinition.baseId], propertiesQA, objectTypesQA));\n }\n return fields;\n }\n\n #isCreatable(objectTypeId: string) {\n return ![SystemType.FOLDER, SystemType.DOCUMENT].includes(objectTypeId);\n }\n\n /**\n * Fetch a collection of form models.\n * @param objectTypeIDs Object type IDs to fetch form model for\n * @param situation Form situation\n * @returns Object where the object type id is key and the form model is the value\n */\n getObjectTypeForms(objectTypeIDs: string[], situation: string): Observable<Record<string, any>> {\n return forkJoin(\n objectTypeIDs.map((o) =>\n this.getObjectTypeForm(o, situation).pipe(\n catchError((e) => of(null)),\n map((res) => ({\n id: o,\n formModel: res\n }))\n )\n )\n ).pipe(\n map((res) => {\n const resMap: Record<string, any> = {};\n res\n .map((r) => (!r.formModel ? { ...r, formModel: this.#generateDefaultFormModel(r.id) } : r))\n .filter((r) => this.#formHasElements(r.formModel))\n .forEach((r: any) => (resMap[r.id] = r.formModel));\n return resMap;\n })\n );\n }\n\n /**\n * Generate a default form model for an object type. This is used when the backend does not return a form model.\n * @param typeId Object type ID or SOT ID\n */\n #generateDefaultFormModel(typeId: string): any {\n const type = this.getObjectType(typeId) || this.getSecondaryObjectType(typeId);\n if (type) {\n return {\n id: type.id,\n label: this.getLocalizedLabel(type.id),\n elements: type.fields.map((f) => this.toFormElement(f)),\n title: this.getLocalizedLabel(type.id),\n description: this.getLocalizedDescription(type.id)\n };\n }\n return null;\n }\n\n /**\n * Get the form model of an object type.\n *\n * @param objectTypeId ID of the object type to fetch the form for\n * @param situation The form situation to be fetched\n * @returns Form model\n */\n getObjectTypeForm(objectTypeId: string, situation: string): Observable<any> {\n return this.#appCache\n .getItem(`${this.#STORAGE_KEY_FORMS}${objectTypeId}_${situation}`)\n .pipe(switchMap((res) => (res ? of(res) : this.#fetchObjectTypeForm(objectTypeId, situation))));\n }\n\n #fetchObjectTypeForm(objectTypeId: string, situation: string): Observable<any> {\n return this.#backend.get(Utils.buildUri(`/dms/forms/${objectTypeId}`, { situation })).pipe(\n // add form to cache\n switchMap((res) => this.#appCache.setItem(`${this.#STORAGE_KEY_FORMS}${objectTypeId}_${situation}`, res).pipe(map(() => res)))\n );\n }\n\n #clearObjectTypeFormCache() {\n // reset cache of object forms\n return this.#appCache\n .getStorageKeys()\n .pipe(\n switchMap((keys: string[]) =>\n forkJoin(keys.filter((key) => key.startsWith(this.#STORAGE_KEY_FORMS)).map((key) => this.#appCache.removeItem(key).pipe(catchError(() => of(null)))))\n )\n )\n .subscribe();\n }\n\n /**\n * Check whether or not the model has at least one form element. Recursive.\n * @param element Form element to check child elements for\n */\n #formHasElements(element: any): boolean {\n let hasElement = false;\n element.elements?.forEach((e: any) => {\n if (!['o2mGroup', 'o2mGroupStack'].includes(e.type)) {\n hasElement = true;\n } else if (!hasElement) {\n hasElement = this.#formHasElements(e);\n }\n });\n return hasElement;\n }\n\n /**\n * Generates an internal type for a given object type field.\n * Adding this to a form element or object type field enables us to render forms\n * based on object type fields in a more performant way. Otherwise we would\n * have to evaluate the conditions for every form element on every digest cycle.\n * @param type propertyType of the ObjectTypeField\n * @param classifications classifications of the ObjectTypeField\n */\n getInternalFormElementType(type: string, classifications?: string[]): ObjectTypeFieldInternalType {\n const _classifications = this.getClassifications(classifications || []);\n\n if (type === 'string' && _classifications.has(Classification.STRING_REFERENCE)) {\n return InternalFieldType.STRING_REFERENCE;\n } else if (type === 'string' && _classifications.has(Classification.STRING_ORGANIZATION)) {\n return InternalFieldType.STRING_ORGANIZATION;\n } else if (type === 'string' && _classifications.has(Classification.STRING_ORGANIZATION_SET)) {\n return InternalFieldType.STRING_ORGANIZATION_SET;\n } else if (type === 'string' && _classifications.has(Classification.STRING_CATALOG_I18N)) {\n return InternalFieldType.STRING_CATALOG_I18N;\n } else if (type === 'string' && _classifications.has(Classification.STRING_CATALOG)) {\n return InternalFieldType.STRING_CATALOG;\n } else if (type === 'boolean' && _classifications.has(Classification.BOOLEAN_SWITCH)) {\n return InternalFieldType.BOOLEAN_SWITCH;\n } else if (\n type === 'string' &&\n (_classifications.has(Classification.STRING_CATALOG_DYNAMIC) || _classifications.has(Classification.STRING_CATALOG_CUSTOM))\n ) {\n return InternalFieldType.STRING_DYNAMIC_CATALOG;\n } else {\n // if there are no matching conditions just return the original type\n return type as ObjectTypeFieldType;\n }\n }\n\n getObjectTypeField(id: string): ObjectTypeField | undefined {\n const f = this.system?.allFields[id];\n return f ? { ...f, _internalType: this.getInternalFormElementType(f.propertyType, f.classifications) } : undefined;\n }\n\n /**\n * Extract classifications from object type fields classification\n * string. This string may contain more than one classification entry.\n *\n * Classification is a comma separated string that may contain additional\n * properties related to on classification entry. Example:\n *\n * `id:reference[system:folder], email`\n *\n * @param classifications Object type fields classification property (schema)\n */\n getClassifications(classifications: string[]): Map<string, ClassificationEntry> {\n const res = new Map<string, ClassificationEntry>();\n if (classifications) {\n classifications.forEach((c) => {\n const matches: RegExpMatchArray | null = c.match(/^([^\\[]*)(\\[(.*)\\])?$/);\n if (matches && matches.length) {\n res.set(matches[1], {\n classification: matches[1],\n options: matches[3] ? matches[3].split(',').map((o) => o.trim()) : []\n });\n }\n });\n }\n return res;\n }\n\n toFormElement(field: ObjectTypeField): any {\n return { ...field, label: this.getLocalizedLabel(field.id), name: field.id, type: field.propertyType };\n }\n\n updateAuthData(data: Partial<AuthData>) {\n this.authData = { ...this.authData!, ...data };\n this.#backend.setHeader('Accept-Language', this.authData.language);\n return this.#appCache.setItem(this.#STORAGE_KEY_AUTH_DATA, this.authData);\n }\n\n updateLocalizations(iso: string): Observable<any> {\n return this.updateAuthData({ language: iso }).pipe(\n switchMap(() => this.#fetchLocalizations()),\n tap((res) => {\n this.system!.i18n = res;\n this.#appCache.setItem(this.#STORAGE_KEY, this.system).subscribe();\n this.#systemSource.next(this.system!);\n })\n );\n }\n\n #fetchLocalizations(): Observable<Localization> {\n return this.#backend.get('/resources/text');\n }\n\n fetchResources(id: string): Observable<{ global: any; tenant: any }> {\n return this.#backend\n .batch([\n { uri: `/system/resources/${id}`, base: ApiBase.core },\n { uri: `/admin/resources/${id}`, base: ApiBase.core }\n ])\n .pipe(map(([global, tenant]) => ({ global, tenant })));\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BackendService } from '../backend/backend.service';\nimport { BaseObjectTypeField, ContentStreamField } from '../system/system.enum';\nimport {\n AggregateResult,\n Aggregation,\n Operator,\n SearchFilter,\n SearchQuery,\n SearchResponse,\n SearchResult,\n SearchResultContent,\n SearchResultItem\n} from './search.service.interface';\nimport { RangeValue } from '../../model/range-value.interface';\nimport { SystemService } from '../system/system.service';\nimport { Utils } from '../../util/utils';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SearchService {\n #backend = inject(BackendService);\n #system = inject(SystemService);\n\n static DEFAULT_QUERY_SIZE = 50;\n\n /**\n * Execute a search query ans transform the result to a SearchResult object\n * @param query The search query\n * @returns Observable of a SearchResult\n */\n search(query: SearchQuery): Observable<SearchResult> {\n return this.searchRaw(query).pipe(map((res) => this.toSearchResult(res, query.size || SearchService.DEFAULT_QUERY_SIZE, query.from || 0)));\n }\n\n /**\n * Execute a raw search query and return the result as is.\n * @param query The search query\n * @returns Observable of the raw search result\n */\n searchRaw(query: SearchQuery): Observable<any> {\n if (!query.size) query.size = SearchService.DEFAULT_QUERY_SIZE;\n return this.#backend.post(`/dms/objects/search`, query);\n }\n\n /**\n * Search for objects in the dms using CMIS like SQL syntax.\n * @param statement The query statement\n * @param size The number of items to return\n * @returns Observable of a SearchResult\n */\n searchCmis(statement: string, size = SearchService.DEFAULT_QUERY_SIZE): Observable<SearchResult> {\n return this.#executeCmisSearch(statement, size);\n }\n\n #executeCmisSearch(statement: string, maxItems: number, skipCount: number = 0): Observable<SearchResult> {\n return this.#backend\n .post(\n '/dms/objects/cmisSearch',\n {\n query: {\n statement,\n skipCount,\n maxItems,\n handleDeletedDocuments: 'DELETED_DOCUMENTS_EXCLUDE'\n }\n }\n // Using API-WEB because it enriches the response with additional information (resolved user names, etc.)\n // ApiBase.core\n )\n .pipe(map((res) => this.toSearchResult(res as SearchResponse, maxItems, skipCount)));\n }\n\n /**\n * Fetch aggragations for a given query.\n * @param q The query\n * @param aggregations List of aggregations to be fetched (e.g. `enaio:objectTypeId`\n * to get an aggregation of object types)\n */\n aggregate(q: SearchQuery, aggregations: string[]) {\n q.aggs = aggregations;\n return this.searchRaw(q).pipe(map((res) => this.#toAggregateResult(res, aggregations)));\n }\n\n /**\n * Map search result from the backend to applications AggregateResult object\n * @param searchResponse The backend response\n * @param aggregations The aggregations to be fetched\n */\n #toAggregateResult(searchResponse: any, aggregations?: string[]): AggregateResult {\n const agg: Aggregation[] = [];\n if (aggregations) {\n aggregations.forEach((a) => {\n const ag: Aggregation = {\n aggKey: a,\n entries: searchResponse.objects.map((o: any) => ({\n key: o.properties[a].value,\n count: o.properties['OBJECT_COUNT'].value\n }))\n };\n agg.push(ag);\n });\n }\n return {\n totalNumItems: searchResponse.totalNumItems,\n aggregations: agg\n };\n }\n\n /**\n * Go to a page of a search result.\n * @param query SearchQuery or CMIS query statement\n * @param page The number of the page to go to\n */\n getPage(query: SearchQuery | string, page: number, pageSize = SearchService.DEFAULT_QUERY_SIZE): Observable<SearchResult> {\n const isCmis = typeof query === 'string';\n if (isCmis) {\n return this.#executeCmisSearch(query as string, pageSize, (page - 1) * pageSize);\n } else {\n query.from = (page - 1) * (query.size || pageSize);\n return this.search(query);\n }\n }\n\n /**\n * Map search result from the backend to applications SearchResult object\n * @param searchResponse The backend response\n */\n toSearchResult(searchResponse: SearchResponse, pageSize: number = SearchService.DEFAULT_QUERY_SIZE, skipCount: number = 0): SearchResult {\n const resultListItems: SearchResultItem[] = [];\n const objectTypes: string[] = [];\n\n searchResponse.objects.forEach((o: any) => {\n const fields = new Map();\n // process properties section of result\n Object.keys(o.properties).forEach((key: string) => {\n let value = o.properties[key].value;\n if (o.properties[key].clvalue) {\n // table fields will have a clientValue too ...\n value = o.properties[key].clvalue;\n // ... and also may contain values that need to be resolved\n if (o.properties[key].resolvedValues) {\n value.forEach((v: any) => {\n Object.keys(v).forEach((k) => {\n const resValue = Array.isArray(v[k]) ? v[k].map((i: any) => o.properties[key].resolvedValues[i]) : o.properties[key].resolvedValues[v[k]];\n if (resValue) {\n v[`${k}_title`] = resValue;\n }\n });\n });\n }\n }\n\n fields.set(key, value);\n if (o.properties[key].title) {\n fields.set(key + '_title', o.properties[key].title);\n }\n });\n\n // process contentStreams section of result if available.\n // Objects that don't have files attached won't have this section\n let content: SearchResultContent | undefined;\n if (o.contentStreams && o.contentStreams.length > 0) {\n // we assume that each result object only has ONE file attached, altough\n // this is an array and there may be more\n const contentStream = o.contentStreams[0];\n // also add contentstream related fields to the result fields\n fields.set(ContentStreamField.LENGTH, contentStream.length);\n fields.set(ContentStreamField.MIME_TYPE, contentStream.mimeType);\n fields.set(ContentStreamField.FILENAME, contentStream.fileName);\n fields.set(ContentStreamField.ID, contentStream.contentStreamId);\n fields.set(ContentStreamField.RANGE, contentStream.contentStreamRange);\n fields.set(ContentStreamField.REPOSITORY_ID, contentStream.repositoryId);\n fields.set(ContentStreamField.DIGEST, contentStream.digest);\n fields.set(ContentStreamField.ARCHIVE_PATH, contentStream.archivePath);\n\n content = {\n contentStreamId: contentStream.contentStreamId,\n repositoryId: contentStream.repositoryId,\n range: contentStream.range,\n digest: contentStream.digest,\n archivePath: contentStream.archivePath,\n fileName: contentStream.fileName,\n mimeType: contentStream.mimeType,\n size: contentStream.length\n };\n }\n\n const objectTypeId = o.properties[BaseObjectTypeField.OBJECT_TYPE_ID] ? o.properties[BaseObjectTypeField.OBJECT_TYPE_ID].value : null;\n if (objectTypes.indexOf(objectTypeId) === -1) {\n objectTypes.push(objectTypeId);\n }\n\n resultListItems.push({\n objectTypeId,\n content,\n fields,\n permissions: o.permissions\n });\n });\n\n const totalPages = Math.ceil(searchResponse.totalNumItems / pageSize);\n const page = (!skipCount ? 0 : skipCount / pageSize) + 1;\n const result: SearchResult = {\n hasMoreItems: searchResponse.hasMoreItems,\n totalNumItems: searchResponse.totalNumItems,\n items: resultListItems,\n objectTypes: objectTypes,\n paging: totalPages > 1 ? { page, totalPages } : undefined\n };\n return result;\n }\n\n /**\n * Maps data extracted from a search form to search filters. Every key of the form data object\n * will be mapped to a search filter.\n * @param formData form data\n * @returns Array of search filters\n */\n formDataToSearchFilter(formData: Record<string, unknown>): SearchFilter[] {\n const isRangeValue = (v: unknown) => {\n return typeof v === 'object' && v !== null && 'firstValue' in v && 'operator' in v;\n };\n\n const filters: SearchFilter[] = [];\n Object.keys(formData).forEach((key) => {\n const value = formData[key];\n if (isRangeValue(value)) {\n const f = this.rangeValueToSearchFilter(value as RangeValue, key);\n if (f) filters.push(f);\n } else {\n filters.push({\n f: key,\n o: Array.isArray(value) ? Operator.IN : Operator.EQUAL,\n v1: value\n });\n }\n });\n return filters;\n }\n\n rangeValueToSearchFilter(value: RangeValue, property: string): SearchFilter | undefined {\n return this.#system.getObjectTypeField(property)?.propertyType === 'datetime'\n ? this.#dateRangeValueToSearchFilter(value as RangeValue<Date | string>, property)\n : {\n f: property,\n o: value.operator,\n v1: value.firstValue,\n v2: value.secondValue\n };\n }\n\n #dateRangeValueToSearchFilter(rv: RangeValue<Date | string>, property: string): SearchFilter | undefined {\n const v1 = rv.firstValue;\n const v2 = rv.secondValue;\n\n switch (rv.operator) {\n case Operator.EQUAL: {\n return {\n f: property,\n o: Operator.INTERVAL_INCLUDE_BOTH,\n v1: this.#dateToISOString(v1, 'start'),\n v2: this.#dateToISOString(v1, 'end')\n };\n }\n case Operator.GREATER_OR_EQUAL: {\n return {\n f: property,\n o: rv.operator,\n v1: this.#dateToISOString(v1)\n };\n }\n case Operator.LESS_OR_EQUAL: {\n return {\n f: property,\n o: rv.operator,\n v1: this.#dateToISOString(v1, 'end')\n };\n }\n case Operator.INTERVAL_INCLUDE_BOTH: {\n return {\n f: property,\n o: rv.operator,\n v1: this.#dateToISOString(v1, 'start'),\n v2: v2 ? this.#dateToISOString(v2, 'end') : ''\n };\n }\n default:\n return undefined;\n }\n }\n\n /**\n * Checks if value is a date and retrieves an ISOString representation. Optionally you can determine, if it should be the beginning or the end of a day.\n *\n * @param value\n * @param range\n * @private\n */\n #dateToISOString(value: Date | string, range: 'start' | 'end' = 'start'): string {\n const date = typeof value === 'string' ? new Date(value) : value;\n const offset = Utils.DEFAULT_TIME_OFFSET_V2; // T+23:59:59:999\n\n if (!Utils.isValidDate(date)) return '';\n\n const isoDateString = date.toISOString();\n const isoDateStringWithOffset = new Date(date.getTime() + offset).toISOString();\n\n switch (range) {\n case 'start':\n return isoDateString;\n case 'end':\n return isoDateStringWithOffset;\n default:\n return isoDateString;\n }\n }\n}\n","/**\n * Interface for the applications main config file\n * @ignore\n */\nexport interface YuvConfig {\n core: {\n // apiBase: {\n // core: string;\n // 'api-web': string;\n // };\n languages: YuvConfigLanguages[];\n logging?: {\n level: 'debug' | 'error' | 'warn' | 'info';\n };\n permissions?: {\n retentionManagerRole?: string;\n advancedUserRole?: string;\n manageSettingsRole?: string;\n };\n };\n location?: {\n hostname?: string;\n port?: number;\n };\n}\n/**\n * interface providing localization of application\n */\nexport interface YuvConfigLanguages {\n iso: string;\n label: string;\n dir?: Direction;\n fallback?: boolean;\n}\n\nexport enum Direction {\n LTR = 'ltr',\n RTL = 'rtl'\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const CUSTOM_EVENTS = new InjectionToken<string[]>('CUSTOM_EVENTS', { factory: () => [] });\nexport const CUSTOM_EVENTS_TRUSTED_ORIGINS = new InjectionToken<string[]>('CUSTOM_EVENTS_TRUSTED_ORIGINS', { factory: () => [] });\n","/**\n * Triggerable and Subscribable events\n */\nexport interface YuvEvent {\n /**\n * type\n */\n type: string;\n /**\n * data to be passed along with the event\n */\n data?: any;\n}\n\n/**\n * Mandatory Custom event prefix for all custom YUV events\n */\nexport const CUSTOM_YUV_EVENT_PREFIX = 'yuv.';\n\n/**\n * Message event interface for postMessage events\n */\nexport interface YuvMessage {\n type: string;\n data: any;\n timestamp: number;\n source: string;\n}\n","import { inject, Injectable, NgZone } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { CUSTOM_EVENTS, CUSTOM_EVENTS_TRUSTED_ORIGINS } from './custom.events.token';\nimport { CUSTOM_YUV_EVENT_PREFIX, YuvEvent } from './event.interface';\n\n/**\n * Service for providing triggered events\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class EventService {\n readonly #customEvents = inject(CUSTOM_EVENTS);\n readonly #customEventsTrustedOrigins = inject(CUSTOM_EVENTS_TRUSTED_ORIGINS);\n readonly #ngZone = inject(NgZone);\n #eventSource = new Subject<YuvEvent>();\n event$: Observable<YuvEvent> = this.#eventSource.asObservable();\n\n constructor() {\n this.#listenToWindowEvents();\n }\n\n #startsWithAllowed(value: unknown): boolean {\n return typeof value === 'string' && this.#customEvents.some((prefix) => value.startsWith(prefix));\n }\n\n #isValidExternalMessage(event: MessageEvent): boolean {\n this.#customEvents.push(CUSTOM_YUV_EVENT_PREFIX);\n\n if (!event.data || typeof event.data !== 'object') return false;\n if (!this.#startsWithAllowed(event.data.source) || !this.#startsWithAllowed(event.data.type)) return false;\n // Accept messages from trusted origins\n this.#customEventsTrustedOrigins.push(window.location.origin);\n\n const isFromTrustedOrigin = this.#customEventsTrustedOrigins.includes(event.origin);\n const hasValidStructure = event.data && (event.data.type || event.data.eventType) && typeof event.data === 'object';\n\n return isFromTrustedOrigin && hasValidStructure;\n }\n\n #listenToWindowEvents() {\n window.addEventListener('message', (event: MessageEvent) =>\n this.#ngZone.run(() => this.#isValidExternalMessage(event) && this.trigger(event.data.type, event.data.data))\n );\n }\n\n /**\n * Triggers a postMessage event that will be sent to the yuuvis global event Trigger\n * @param type Type/key of the event\n * @param data Data to be sent along with the event\n */\n triggerPostMessageEvent(type: string, data?: any) {\n const targetOrigin = window.location.origin;\n const payload = {\n type,\n data,\n timestamp: Date.now()\n };\n window.postMessage(payload, targetOrigin);\n }\n\n /**\n * Trigger an global event\n * @param type Type/key of the event\n * @param data Data to be send along with the event\n */\n trigger(type: string, data?: any) {\n this.#eventSource.next({ type, data });\n }\n\n /**\n * Listen on a triggered event\n * @param types Type/key of the event\n */\n on(...types: string[]): Observable<YuvEvent> {\n return this.event$.pipe(filter((event) => event && !!types.find((t) => t === event.type)));\n }\n}\n","import { DmsObject } from '../../model/dms-object.model';\n\n/**\n * Events emitted by parts of the application\n */\nexport enum YuvEventType {\n LOGOUT = 'yuv.user.logout',\n CLIENT_LOCALE_CHANGED = 'yuv.user.locale.client.changed',\n DMS_OBJECT_LOADED = 'yuv.dms.object.loaded',\n DMS_OBJECT_CREATED = 'yuv.dms.object.created',\n DMS_OBJECT_DELETED = 'yuv.dms.object.deleted',\n DMS_OBJECT_UPDATED = 'yuv.dms.object.updated',\n DMS_OBJECT_CONTENT_UPDATED = 'yuv.dms.object.content.updated',\n DMS_OBJECTS_MOVED = 'yuv.dms.objects.moved'\n}\n\nexport interface YuvEventDeletedData {\n // ID of the object that has been deleted\n id: string;\n // data of the deleted object\n properties: Record<string, unknown>;\n}\nexport type YuvEventUpdatedData = DmsObject;\nexport type YuvEventCreatedData = string[];\n","import { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, forkJoin, Observable, of } from 'rxjs';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\nimport { UserSettings, YuvUser } from '../../model/yuv-user.model';\nimport { BackendService } from '../backend/backend.service';\nimport { Direction } from '../config/config.interface';\nimport { ConfigService } from '../config/config.service';\nimport { EventService } from '../event/event.service';\nimport { YuvEventType } from '../event/events';\nimport { Logger } from '../logger/logger.service';\nimport { StoredObjectConfig } from '../object-config/object-config.interface';\nimport { AdministrationRoles } from '../system/system.enum';\nimport { UserPermissions, UserPermissionsSection } from '../system/system.interface';\nimport { SystemService } from '../system/system.service';\n\n/**\n * Service providing user account configurations.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class UserService {\n #USERS_SETTINGS = '/users/settings/';\n #DEFAULT_SETTINGS = '/users/settings';\n\n #SETTINGS_SECTION_OBJECTCONFIG = 'object-config';\n\n #user?: YuvUser;\n #userSource = new BehaviorSubject<YuvUser | undefined>(this.#user);\n user$: Observable<YuvUser | undefined> = this.#userSource.asObservable();\n\n globalSettings = new Map();\n userPermissions?: UserPermissions;\n\n /**\n * @ignore\n */\n constructor(\n private backend: BackendService,\n private translate: TranslateService,\n private logger: Logger,\n private system: SystemService,\n private eventService: EventService,\n private config: ConfigService\n ) {}\n\n private getUiDirection(iso: string): string {\n // languages that are read right to left\n const rtlLanguages = ['ar', 'arc', 'dv', 'fa', 'ha', 'he', 'khw', 'ks', 'ku', 'ps', 'ur', 'yi'];\n return rtlLanguages.indexOf(iso) === -1 ? Direction.LTR : Direction.RTL;\n }\n\n /**\n * Set a new current user\n * @param user The user to be set as current user\n */\n public setCurrentUser(user: YuvUser) {\n this.#user = user;\n this.changeClientLocale('', false);\n this.#userSource.next(this.#user);\n }\n\n getCurrentUser(): YuvUser {\n return this.#user!;\n }\n\n get hasAdminRole(): boolean {\n return this.#user?.authorities?.includes(AdministrationRoles.ADMIN) || false;\n }\n\n get hasSystemRole(): boolean {\n return this.#user?.authorities?.includes(AdministrationRoles.SYSTEM) || false;\n }\n\n get hasAdministrationRoles(): boolean {\n return this.hasAdminRole || this.hasSystemRole;\n }\n\n get hasManageSettingsRole(): boolean {\n const customRole = this.config.get('core.permissions.manageSettingsRole');\n const manageSettingsRole = customRole || AdministrationRoles.MANAGE_SETTINGS;\n return this.#user?.authorities?.includes(manageSettingsRole) || false;\n }\n\n get isAdvancedUser(): boolean {\n const customRole = this.config.get('core.permissions.advancedUserRole');\n const advancedUserRole = customRole || AdministrationRoles.MANAGE_SETTINGS;\n return this.#user?.authorities?.includes(advancedUserRole) || false;\n }\n\n get isRetentionManager(): boolean {\n const customRole = this.config.get('core.permissions.retentionManagerRole');\n const retenetionManagerRole = customRole || AdministrationRoles.MANAGE_SETTINGS;\n return this.#user?.authorities?.includes(retenetionManagerRole) || false;\n }\n\n canCreateObjects = false;\n\n /**\n * Change the users client locale\n * @param iso ISO locale string to be set as new client locale\n */\n changeClientLocale(iso: string, persist = true): void {\n if (this.#user) {\n const languages = this.config.getClientLocales().map((lang) => lang.iso);\n iso = iso || this.#user.getClientLocale(this.config.getDefaultClientLocale());\n if (!languages.includes(iso)) {\n iso = this.config.getDefaultClientLocale();\n }\n this.logger.debug(\"Changed client locale to '\" + iso + \"'\");\n this.backend.setHeader('Accept-Language', iso);\n this.#user.uiDirection = this.getUiDirection(iso);\n this.#user.userSettings.locale = iso;\n if (this.translate.currentLang !== iso || this.system.authData?.language !== iso) {\n const ob = persist\n ? forkJoin([\n this.translate.use(iso),\n this.system.updateLocalizations(iso),\n this.saveUserSettings(this.#user.userSettings).pipe(\n tap(() => {\n // this.#userSource.next(this.#user);\n this.logger.debug('Loading system definitions i18n resources for new locale.');\n })\n )\n ])\n : this.translate.use(iso);\n ob.subscribe(() => this.eventService.trigger(YuvEventType.CLIENT_LOCALE_CHANGED, iso));\n }\n }\n }\n\n saveUserSettings(settings: Partial<UserSettings>): Observable<any> {\n if (this.#user) {\n //console.log(this.#user.userSettings);\n\n this.#user.userSettings = { ...this.#user.userSettings, ...settings };\n return this.backend.post(this.#DEFAULT_SETTINGS, this.#user.userSettings).pipe(tap(() => this.#userSource.next(this.#user)));\n } else return of(null);\n }\n\n fetchUserSettings(): Observable<UserSettings> {\n return this.backend.get('/dms/permissions').pipe(\n catchError((e) => of(undefined)),\n switchMap((res) => {\n this.setUserPermissions(res);\n return this.backend.get(this.#DEFAULT_SETTINGS);\n })\n );\n }\n\n private setUserPermissions(res: any): void {\n this.userPermissions = {\n create: this.mapPermissions('CREATE', res),\n write: this.mapPermissions('WRITE', res),\n read: this.mapPermissions('READ', res),\n delete: this.mapPermissions('DELETE', res)\n };\n const sp = {\n createableObjectTypes: [\n ...this.userPermissions.create.folderTypes,\n ...this.userPermissions.create.objectTypes,\n ...this.userPermissions.create.secondaryObjectTypes\n ],\n searchableObjectTypes: [\n ...this.userPermissions.read.folderTypes,\n ...this.userPermissions.read.objectTypes,\n ...this.userPermissions.read.secondaryObjectTypes\n ]\n };\n this.system.setPermissions(sp);\n this.canCreateObjects = sp.createableObjectTypes.length > 0;\n }\n\n private mapPermissions(section: 'CREATE' | 'READ' | 'WRITE' | 'DELETE', apiResponse: any): UserPermissionsSection {\n const res = apiResponse[section] || {};\n return {\n folderTypes: res['folderTypeIds'] || [],\n objectTypes: res['objectTypeIds'] || [],\n secondaryObjectTypes: res['secondaryObjectTypeIds'] || []\n };\n }\n\n /**\n * Search for a user based on a search term\n * @param term Search term\n * @param excludeMe whether or not to exclude myself from the result list\n * @param roles narrow down the search results by certain roles\n */\n queryUser(term: string, excludeMe?: boolean, roles?: string[]): Observable<YuvUser[]> {\n let params = new HttpParams().set('search', term).set('excludeMe', `${!!excludeMe}`);\n roles?.length && roles.map((r) => (params = params.append(`roles`, r)));\n return this.backend.get(`/idm/users?${params}`).pipe(map((users) => (!users ? [] : users.map((u: any) => new YuvUser(u)))));\n }\n\n getUserById(id: string): Observable<YuvUser> {\n return this.backend.get(`/idm/users/${id}`).pipe(map((user) => new YuvUser(user, this.#user!.userSettings)));\n }\n\n logout(redirRoute?: string): void {\n const redir = redirRoute ? `?redir=${redirRoute}` : '';\n (window as any).location.href = `${this.backend.getApiBase('logout')}${redir}`;\n }\n\n getSettings(section: string): Observable<any> {\n return this.#user ? this.backend.get(this.#USERS_SETTINGS + encodeURIComponent(section)) : of(null);\n }\n\n saveObjectConfig(objectConfigs: StoredObjectConfig): Observable<any> {\n return this.backend.post(this.#USERS_SETTINGS + encodeURIComponent(this.#SETTINGS_SECTION_OBJECTCONFIG), objectConfigs);\n }\n\n loadObjectConfig(): Observable<StoredObjectConfig | undefined> {\n return this.getSettings(this.#SETTINGS_SECTION_OBJECTCONFIG).pipe(catchError(() => of(undefined)));\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { SearchService } from '../search/search.service';\nimport { Operator, SearchQuery } from '../search/search.service.interface';\nimport { AuditField, SystemType } from '../system/system.enum';\nimport { UserService } from '../user/user.service';\nimport { AuditQueryOptions, AuditQueryResult } from './audit.interface';\n/**\n * Service providing access to the systems audit entries. Audits can be seen as the history of\n * an object. Actions perormed on an object (eg. read, write, delete, ...) will be recorded during\n * the objects lifecycle. Audits are provided based on a users permissions. Beside the audit entries\n * visible to regular users there are more technical ones that will only be shown to users that\n * have administrative role.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuditService {\n #searchService = inject(SearchService);\n #userService = inject(UserService);\n\n // default number of items to be fetched\n private DEFAULT_RES_SIZE = 20;\n\n // audit action codes that should be visible to regular users\n private userAuditActions: number[] = [\n 100, // metadata created\n 101, // metadata created (with content)\n 110, // tag created\n 201, // content deleted\n 210, // tag deleted\n 300, // metadata updated\n 301, // content updated\n 302, // metadata and content updated\n 303, // content moved\n 310, // tag updated\n 325, // object restored form version\n 340, // object moved\n 10000 // custom audit entries\n ];\n // audit action codes that should be visible to admin users\n private adminAuditActions: number[] = [\n 202, // marked for delete\n 220, // version deleted\n 400, // content read\n 401, // metadata read\n 402, // rendition read (text)\n 403, // rendition read (pdf)\n 404 // rendition read (thumbnail)\n ];\n\n /**\n * Get audit entries of a dms object\n * @param id The id of the object to get the audit entries for\n * @param options Options\n */\n getAuditEntries(id: string, options: AuditQueryOptions = {}): Observable<AuditQueryResult> {\n const auditActions = this.getAuditActions(!!options.allActions, options?.skipActions);\n const q: SearchQuery = {\n size: this.DEFAULT_RES_SIZE,\n types: [SystemType.AUDIT],\n filters: [\n {\n f: AuditField.REFERRED_OBJECT_ID,\n o: Operator.EQUAL,\n v1: id\n },\n {\n f: AuditField.ACTION,\n o: Operator.IN,\n v1: auditActions\n }\n ],\n sort: [\n {\n field: AuditField.CREATION_DATE,\n order: 'desc'\n }\n ]\n };\n return this.#fetchAudits(q);\n }\n\n /**\n * Get an array of action codes that are provided by the service. Based on\n * whether or not the user has admin permissions you'll get a different\n * set of actions.\n * @param skipActions codes of actions that should not be fetched\n */\n getAuditActions(allActions: boolean, skipActions?: number[]): number[] {\n const actions = allActions || this.#userService.isAdvancedUser ? [...this.userAuditActions, ...this.adminAuditActions] : this.userAuditActions;\n return actions.filter((a) => !skipActions || !skipActions.includes(a));\n }\n\n /**\n * Get a certain page for a former audits query.\n * @param auditsResult The result object of a former audits query\n * @param page The page to load\n */\n getPage(auditsResult: AuditQueryResult, page: number) {\n const q = auditsResult.query;\n q.from = (page - 1) * (q.size || this.DEFAULT_RES_SIZE);\n return this.#fetchAudits(q);\n }\n\n #fetchAudits(q: SearchQuery): Observable<AuditQueryResult> {\n return this.#searchService.searchRaw(q).pipe(\n map((res: any) => ({\n query: q,\n items: res.objects.map((o: any) => ({\n action: o.properties[AuditField.ACTION].value,\n actionGroup: this.#getActionGroup(o.properties[AuditField.ACTION].value),\n detail: o.properties[AuditField.DETAIL].value,\n subaction: o.properties[AuditField.SUBACTION] ? o.properties[AuditField.SUBACTION].value : null,\n version: o.properties[AuditField.VERSION].value,\n creationDate: o.properties[AuditField.CREATION_DATE].value,\n createdBy: {\n id: o.properties[AuditField.CREATED_BY].value,\n title: o.properties[AuditField.CREATED_BY].title\n }\n })),\n hasMoreItems: res.hasMoreItems,\n page: !q.from ? 1 : q.from / q.size! + 1\n }))\n );\n }\n\n #getActionGroup(action: number): number {\n try {\n return parseInt(`${action}`.substr(0, 1));\n } catch {\n return -1;\n }\n }\n}\n","/**\n * Result when calling loginDevice endpoint in cloud environment\n * when using device flow\n */\nexport interface LoginDeviceResult {\n user_code: string;\n device_code: string;\n interval: number;\n verification_uri: string;\n expires_in: number;\n}\n/**\n * @ignore\n */\nexport interface StoredToken {\n accessToken: string;\n tenant: string;\n}\n\n/**\n * State emitted by the login function when using the device flow\n */\nexport interface LoginState {\n name: LoginStateName;\n data: any;\n}\n\nexport enum LoginStateName {\n STATE_LOGIN_URI = 'login.uri',\n STATE_DONE = 'login.done',\n STATE_CANCELED = 'login.canceled'\n}\n\nexport interface YuvInitError {\n status: number;\n key: string;\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { CoreConfig } from './core-config';\n\n/**\n * @ignore\n */\nexport const CUSTOM_CONFIG = new InjectionToken<CoreConfig>('CUSTOM_CONFIG', {\n factory: () => ({ main: ['assets/_yuuvis/config/main.json'], translations: ['assets/_yuuvis/i18n/'] })\n});\nexport const CORE_CONFIG = new InjectionToken<CoreConfig>('CORE_CONFIG');\n","import { Inject } from '@angular/core';\nimport { YuvConfig } from './config.interface';\nimport { CUSTOM_CONFIG } from './core-config.tokens';\n\n/**\n * @ignore\n */\nexport class CoreConfig {\n main?: YuvConfig | string[] = ['assets/_yuuvis/config/main.json'];\n translations?: string[] = ['assets/_yuuvis/i18n/'];\n environment?: { production: boolean } = { production: true };\n\n constructor(@Inject(CUSTOM_CONFIG) __config: CoreConfig) {\n Object.assign(this, __config);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable, ReplaySubject, map, tap } from 'rxjs';\nimport { BaseObjectTypeField } from '../system/system.enum';\nimport { GenericObjectType, ObjectTypeField, VirtualObjectType } from '../system/system.interface';\nimport { SystemService } from '../system/system.service';\nimport { UserService } from '../user/user.service';\nimport {\n ObjectConfig,\n ObjectConfigBucket,\n ObjectConfigProperty,\n ObjectConfigRecord,\n ResolvedObjectConfig,\n StoredObjectConfig\n} from './object-config.interface';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n/**\n * Service managing the configuarions for object types.\n * Configuration means that you can pick certain fields\n * of an object type and assign them to a config object.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ObjectConfigService {\n #system = inject(SystemService);\n #user = inject(UserService);\n\n OBJECT_CONFIG_STORAGE_KEY = 'yuv.framework.object-config';\n #objectConfigsSource = new ReplaySubject<StoredObjectConfig>();\n #objectConfigs$: Observable<StoredObjectConfig> = this.#objectConfigsSource.asObservable();\n\n #defaultObjectConfigs: Record<string, ObjectConfig> = {};\n\n #registeredDefaultObjectConfigs: StoredObjectConfig = {\n main: {},\n buckets: []\n };\n\n #objectConfigs: StoredObjectConfig = {\n main: {},\n buckets: []\n };\n\n #isValidObjectConfig(soc: StoredObjectConfig | undefined): boolean {\n return coerceBooleanProperty(soc && Object.hasOwn(soc, 'main') && Object.hasOwn(soc, 'buckets'));\n }\n\n // called on core init (auth.service -> initApp)\n init(): Observable<any> {\n return this.#user.loadObjectConfig().pipe(\n tap((res) => {\n this.#getDefaultObjectConfig();\n this.#objectConfigs = (this.#isValidObjectConfig(res) && res) || {\n main: {},\n buckets: []\n };\n\n this.#objectConfigsSource.next(this.#objectConfigs);\n })\n );\n }\n\n getObjectConfigs$(bucket?: string, includeDefaults?: boolean): Observable<ObjectConfigRecord> {\n return this.#objectConfigs$.pipe(\n map((soc: StoredObjectConfig) => {\n let ocr: ObjectConfigRecord = soc.main;\n const defaults: ObjectConfigRecord = { ...this.#defaultObjectConfigs, ...this.#getRegisteredDefaults(bucket) };\n\n if (bucket) {\n const tileBucket: ObjectConfigBucket | undefined = soc.buckets.find((b) => b.id === bucket);\n if (tileBucket) {\n ocr = tileBucket.configs;\n if (includeDefaults)\n Object.keys(ocr).forEach((k) => {\n ocr[k] = { ...defaults[k], ...ocr[k] };\n });\n }\n }\n return includeDefaults ? { ...defaults, ...ocr } : { ...ocr };\n })\n );\n }\n\n /**\n * Register default object configs. Apps can pre-define how their\n * objects should be rendered.\n * @param bucket Name of a bucket to bind configs to (usually the ID of the app) to\n * separate the configs from other apps. If not provided configs will be saved for\n * the global scope\n */\n registerDefaults(configs: ObjectConfigRecord, bucket?: string) {\n if (bucket) {\n // does bucket exist?\n const tileBucketIdx: number = this.#registeredDefaultObjectConfigs.buckets.findIndex((b) => b.id === bucket);\n if (tileBucketIdx !== -1) {\n this.#registeredDefaultObjectConfigs.buckets[tileBucketIdx].configs = {\n ...this.#registeredDefaultObjectConfigs.buckets[tileBucketIdx].configs,\n ...configs\n };\n } else {\n this.#registeredDefaultObjectConfigs.buckets.push({\n id: bucket,\n configs\n });\n }\n } else {\n this.#registeredDefaultObjectConfigs.main = { ...this.#registeredDefaultObjectConfigs.main, ...configs };\n }\n }\n\n unregisterDefaults(configs: ObjectConfigRecord, bucket?: string) {\n if (bucket) {\n // does bucket exist?\n const tileBucketIdx: number = this.#registeredDefaultObjectConfigs.buckets.findIndex((b) => b.id === bucket);\n if (tileBucketIdx !== -1) {\n this.#registeredDefaultObjectConfigs.buckets.splice(tileBucketIdx, 1);\n }\n } else {\n Object.keys(configs).forEach((key) => {\n delete this.#registeredDefaultObjectConfigs.main[key];\n });\n }\n }\n\n getRegisteredDefault(objectTypeId: string, bucket?: string): ObjectConfig | undefined {\n if (bucket) {\n const b = this.#registeredDefaultObjectConfigs.buckets.find((b) => b.id === bucket);\n return b ? b.configs[objectTypeId] : undefined;\n } else {\n return this.#registeredDefaultObjectConfigs.main[objectTypeId];\n }\n }\n\n #getRegisteredDefaults(bucket?: string): ObjectConfigRecord {\n if (bucket) {\n const defaultTileBucket: ObjectConfigBucket | undefined = this.#registeredDefaultObjectConfigs.buckets.find((b) => b.id === bucket);\n return defaultTileBucket?.configs || {};\n } else return this.#registeredDefaultObjectConfigs.main;\n }\n\n /**\n * Get object config for an object type.\n * @param objectTypeId ID of the object type to get the config for\n * @param bucket Optional bucket ID to fetch the config from. Buckets\n * define separated areas to store/receive those configs. This way\n * components/apps can store different object configs than the ones\n * used accross the whole client application.\n */\n getObjectConfig(type: VirtualObjectType, bucket?: string): ObjectConfig {\n const b: ObjectConfigBucket | undefined = bucket ? this.#objectConfigs.buckets.find((b) => b.id === bucket) : undefined;\n const otr: ObjectConfigRecord = b ? b.configs : this.#objectConfigs.main;\n\n const oc = otr[type.id];\n\n // return oc || this.#getRegisteredDefaults(bucket)[type.id];\n\n // override icons by APP_SCHEMA-icons: temporary solution. Todo: remove when handling of custom svg-icons is clear!\n const result = oc || this.#getRegisteredDefaults(bucket)[type.id] || this.#defaultObjectConfigs[type.id];\n if (result?.icon) result.icon = type.icon ? { svg: type.icon } : result.icon;\n return result;\n }\n\n saveObjectConfig(type: VirtualObjectType, config?: ObjectConfig, bucket?: string): Observable<any> {\n return this.saveObjectConfigs({ [type.id]: config }, bucket);\n }\n\n saveObjectConfigs(configs: Record<string, ObjectConfig | undefined>, bucket?: string): Observable<any> {\n this.#updateObjectConfig(configs, bucket);\n return this.#user.saveObjectConfig(this.#objectConfigs);\n }\n\n #updateObjectConfig(configs: Record<string, ObjectConfig | undefined>, bucket?: string) {\n if (!this.#objectConfigs) {\n this.#objectConfigs = {\n main: {},\n buckets: []\n };\n }\n if (bucket) {\n // does bucket exist?\n const tileBucketIdx: number = this.#objectConfigs.buckets.findIndex((b) => b.id === bucket);\n if (tileBucketIdx !== -1) {\n Object.keys(configs).forEach((objectTypeId) => {\n const config = configs[objectTypeId];\n if (config) {\n this.#objectConfigs.buckets[tileBucketIdx].configs[objectTypeId] = config;\n } else {\n delete this.#objectConfigs.buckets[tileBucketIdx].configs[objectTypeId];\n }\n });\n } else {\n const newBucket: ObjectConfigBucket = { id: bucket, configs: {}};\n Object.keys(configs).forEach((objectTypeId) => {\n const config = configs[objectTypeId];\n if (config) {\n newBucket.configs[objectTypeId] = config;\n }\n });\n \n this.#objectConfigs.buckets.push(newBucket);\n }\n } else {\n Object.keys(configs).forEach((objectTypeId) => {\n const config = configs[objectTypeId];\n if (config) {\n this.#objectConfigs.main[objectTypeId] = config;\n } else {\n delete this.#objectConfigs.main[objectTypeId];\n }\n });\n }\n this.#objectConfigsSource.next(this.#objectConfigs);\n }\n\n getDefaultConfig(objectTypeID: string): ObjectConfig {\n return this.#defaultObjectConfigs[objectTypeID];\n }\n\n getResolvedObjectConfig(data: Record<string, any>, type: VirtualObjectType, bucket?: string, includeDefaults?: boolean): ResolvedObjectConfig {\n const defaultCfg = this.#defaultObjectConfigs[data[BaseObjectTypeField.OBJECT_TYPE_ID]];\n let oc = this.getObjectConfig(type, bucket) || defaultCfg;\n if (includeDefaults) oc = { ...defaultCfg, ...oc };\n const res: Partial<ResolvedObjectConfig> = {\n id: data[BaseObjectTypeField.OBJECT_ID],\n objectTypeId: data[BaseObjectTypeField.OBJECT_TYPE_ID],\n actions: oc.actions,\n badges: oc.badges,\n instanceData: data\n };\n\n if (oc.title)\n res.title = {\n propertyName: oc.title.propertyName,\n value: data[oc.title.propertyName]\n };\n if (oc.description)\n res.description = {\n propertyName: oc.description.propertyName,\n value: data[oc.description.propertyName]\n };\n if (oc.icon)\n res.icon = {\n propertyName: 'custom',\n value: oc.icon.svg\n };\n if (oc.meta)\n res.meta = {\n propertyName: oc.meta.propertyName,\n value: data[oc.meta.propertyName]\n };\n if (oc.aside)\n res.aside = {\n propertyName: oc.aside.propertyName,\n value: data[oc.aside.propertyName]\n };\n\n return res as ResolvedObjectConfig;\n }\n\n /**\n * Load default/fallbac configs based on the object types and\n * their first properties\n */\n #getDefaultObjectConfig(): void {\n this.#system.getObjectTypes(true).forEach((ot: GenericObjectType) => {\n this.#defaultObjectConfigs[ot.id] = {\n objectTypeId: ot.id,\n title: this.#toObjectProperty(ot.fields[0]),\n description: this.#toObjectProperty(ot.fields[1]),\n meta: this.#toObjectProperty(ot.fields[2]),\n aside: this.#toObjectProperty(ot.fields[3])\n };\n });\n }\n\n #toObjectProperty(field: ObjectTypeField): ObjectConfigProperty | undefined {\n return field\n ? {\n label: this.#system.getLocalizedLabel(field.id),\n propertyName: field.id\n }\n : undefined;\n }\n}\n","import { InjectionToken, Provider } from \"@angular/core\";\nimport { YuvUser } from \"../../model/yuv-user.model\";\n\nexport const YUV_USER = new InjectionToken<YuvUser | undefined>('Currently logged in user', {\n factory: () => undefined\n });\n \n export const provideUser = (user: YuvUser): Provider => {\n return { provide: YUV_USER, useValue: user };\n };","import { inject, Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { map, switchMap, tap } from 'rxjs/operators';\nimport { UserSettings, YuvUser } from '../../model/yuv-user.model';\nimport { Utils } from '../../util/utils';\nimport { BackendService } from '../backend/backend.service';\nimport { AppCacheService } from '../cache/app-cache.service';\nimport { CoreConfig } from '../config/core-config';\nimport { CORE_CONFIG } from '../config/core-config.tokens';\nimport { EventService } from '../event/event.service';\nimport { YuvEventType } from '../event/events';\nimport { SystemService } from '../system/system.service';\nimport { UserService } from '../user/user.service';\nimport { YuvInitError } from './auth.interface';\nimport { ObjectConfigService } from '../object-config/object-config.service';\nimport { YUV_USER } from '../user/user.providers';\n\n/**\n * Service handling authentication related issues.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthService {\n // user may have been fetched already in bootstrapping process\n #userToken = inject<YuvUser>(YUV_USER);\n #eventService = inject(EventService);\n #userService = inject(UserService);\n #objectConfigService = inject(ObjectConfigService);\n #appCache = inject(AppCacheService);\n #systemService = inject(SystemService);\n #backend = inject(BackendService);\n\n #INITAL_REQUEST_STORAGE_KEY = 'yuv.core.auth.initialrequest';\n readonly USER_FETCH_URI = '/idm/whoami';\n\n #authenticated = false;\n #authSource = new BehaviorSubject<boolean>(false);\n authenticated$: Observable<boolean> = this.#authSource.asObservable();\n\n #authData!: AuthData;\n // set by core-init\n initError?: YuvInitError;\n\n constructor(@Inject(CORE_CONFIG) public coreConfig: CoreConfig) {}\n\n isLoggedIn() {\n return this.#authenticated;\n }\n\n /**\n * Called while app/core is initialized (APP_INITIALIZER)\n * @ignore\n */\n initUser() {\n return this.fetchUser();\n }\n\n /**\n * Get the current tenant or the previous one persisted locally\n */\n getTenant(): string {\n return this.#authData?.tenant;\n }\n\n /**\n * Fetch information about the user currently logged in\n */\n fetchUser(): Observable<YuvUser> {\n return (this.#userToken ? of(this.#userToken) : this.#backend.get(this.USER_FETCH_URI)).pipe(\n tap(() => {\n this.#authenticated = true;\n this.#authSource.next(this.#authenticated);\n }),\n switchMap((userJson: any) => this.#initApp(userJson))\n );\n }\n\n /**\n * Logs out the current user.\n */\n logout() {\n this.#authenticated = false;\n this.#authSource.next(this.#authenticated);\n this.#eventService.trigger(YuvEventType.LOGOUT);\n }\n\n /**\n * Persists the initial request URI. This is nessesary to be able to\n * redirect the user to the requested page after authentication.\n * This is done on app initialization (core-init).\n */\n setInitialRequestUri() {\n const ignore = ['/', '/index.html'];\n let uri = `${location.pathname}${location.search}`.replace(Utils.getBaseHref(), '');\n uri = !uri.startsWith('/') ? `/${uri}` : uri;\n\n if (!ignore.includes(uri)) {\n this.#appCache\n .setItem(this.#INITAL_REQUEST_STORAGE_KEY, {\n uri: uri,\n timestamp: Date.now()\n })\n .subscribe();\n }\n }\n\n /**\n * Get the URL that entered the app. May be a deep link that could then be\n * picked up again after user has been authenticated.\n */\n getInitialRequestUri(): Observable<{ uri: string; timestamp: number }> {\n return this.#appCache.getItem(this.#INITAL_REQUEST_STORAGE_KEY);\n }\n\n resetInitialRequestUri(): Observable<any> {\n return this.#appCache.removeItem(this.#INITAL_REQUEST_STORAGE_KEY);\n }\n\n /**\n * Initialize/setup the application for a given user. This involves fetching\n * settings and schema information.\n * @param userJson Data retrieved from the backend\n */\n #initApp(userJson: any): Observable<YuvUser> {\n return this.#userService.fetchUserSettings().pipe(\n switchMap((userSettings: UserSettings) => {\n const currentUser = new YuvUser(userJson, userSettings);\n this.#userService.setCurrentUser(currentUser);\n this.#authData = {\n tenant: currentUser.tenant,\n language: currentUser.getClientLocale()\n };\n return this.#systemService.getSystemDefinition(this.#authData).pipe(\n switchMap(() => this.#objectConfigService.init()),\n map(() => currentUser)\n );\n })\n );\n }\n}\n\nexport interface AuthData {\n tenant: string;\n language: string;\n}\n","\nexport const ProcessAction = {\n complete: 'complete',\n claim: 'claim',\n delegate: 'delegate',\n resolve: 'resolve',\n save: 'save'\n};\n\nexport interface Process {\n id: string;\n // objects (IDs) attached to the process\n attachments: string[];\n businessKey: string; //\n deleteReason: string;\n durationInMillis: number; //\n endActivityId: string;\n endTime: Date;\n initiator: ProcessUser;\n name: string;\n processDefinition: { description: string; id: string; idPrefix: string; name: string };\n startActivityId: string;\n startTime: Date;\n startUserId: string;\n // subject: string;\n suspended?: boolean;\n variables: ProcessVariable[]; // tenant admin only\n}\n\n\n// payload for starting a new process\nexport interface ProcessCreatePayload extends ProcessPostPayload {\n processDefinitionKey: string;\n name?: string;\n businessKey?: string;\n returnVariables?: boolean;\n}\n\n// payload for post requests to the bpm backend\nexport interface ProcessPostPayload {\n variables?: ProcessVariable[];\n attachments?: string[];\n subject?: string;\n}\n\nexport interface ProcessVariable {\n name: string;\n type?: string;\n value: any;\n // TODO: Not yet supported by BPM-Engine\n readonly?: boolean;\n scope?: string;\n}\n\n/**\n * Tasks are basically activities defined by a process.\n * Processes may contain several tasks.\n */\nexport interface InboxTask {\n id: string;\n // ID of the process instance that contains this task/activity\n processInstanceId: string;\n assignee: ProcessUser;\n claimTime: Date;\n createTime: Date;\n dueDate: Date;\n description: string;\n // taskMessages?: TaskMessage[];\n // taskForm?: {\n // schemaProperties?: string[];\n // model?: any;\n // data?: any;\n // outcomes?: TaskOutcome[];\n // };\n delegationState?: string;\n formKey: string;\n initiator: ProcessUser;\n name: string;\n owner: ProcessUser;\n parentTaskId: string;\n processDefinition: {\n id: string;\n idPrefix: string;\n };\n subject: string;\n suspended: false;\n variables: ProcessVariable[];\n resolvedValues?: { [id: string]: string };\n attachments: string[];\n }\n\n export interface ProcessUser {\n id: string;\n title: string;\n }\n\n export interface FetchTaskOptions {\n businessKey?: string;\n includeProcessVar?: boolean;\n isCompleted?: boolean;\n processDefinitionKey?: string;\n }","import { inject, Injectable } from '@angular/core';\nimport { BackendService } from '../backend/backend.service';\nimport { FetchTaskOptions, Process, ProcessAction, ProcessCreatePayload, ProcessPostPayload } from './bpm.interface';\nimport { map, Observable, of } from 'rxjs';\nimport { ApiBase } from '../backend/api.enum';\nimport { Utils } from '../../util/utils';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BpmService {\n #backend = inject(BackendService);\n\n startProcess(payload: ProcessCreatePayload): Observable<any> {\n return this.#backend.post('/bpm/processes', payload, ApiBase.apiWeb);\n }\n\n /**\n * Finsihes a task.\n * @param taskId ID of the taks to finish\n * @param payload Data to be send with the complete request (may contain attachments, a new subject or variables)\n */\n completeTask(taskId: string, payload?: ProcessPostPayload): Observable<any> {\n return this.#putTask(taskId, ProcessAction.complete, payload || {});\n }\n\n updateTask(taskId: string, payload?: ProcessPostPayload): Observable<any> {\n return this.#putTask(taskId, ProcessAction.save, payload || {});\n }\n\n //TODO: replace with propper service call\n getProcessPoll(): Observable<any> {\n const random = Math.random();\n console.log('getProcessPoll: ', { random });\n\n return of([{ title: `task title ${random}`, duedate: new Date() }]);\n }\n\n getProcessInstance(processDefinitionKey: string, options?: FetchTaskOptions): Observable<Process> {\n return this.#backend\n .get(`/bpm/processes${Utils.optionsToURLParams({ ...options, processDefinitionKey })}`, ApiBase.apiWeb)\n .pipe(map(({ objects }) => objects[0]));\n }\n\n deleteProcess(processInstanceId: string): Observable<any> {\n return this.#backend.delete(`/bpm/processes/${processInstanceId}`, ApiBase.apiWeb);\n }\n\n #putTask(taskId: string, action: string, payload: ProcessPostPayload): Observable<any> {\n const pl = { ...payload, action: action };\n return this.#backend.put(`/bpm/tasks/${taskId}`, pl, ApiBase.apiWeb);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CatalogService {\n // TODO: Implement when clarified\n // constructor(private backend: BackendService, private userService: UserService) {}\n\n // private userHasScopePermissions(scope: 'admin' | 'system'): boolean {\n // if (scope === 'admin') {\n // return this.userService.hasAdminRole;\n // } else if (scope === 'system') {\n // return this.userService.hasSystemRole;\n // } else {\n // return false;\n // }\n // }\n\n // /**\n // * Loads a catalog from the backend.\n // * @param qname The catalogs qualified name\n // * @param scope The scope to load the catalog from. This decides which controler\n // * will be used to fetch the catalog. Possibe values: 'admin' or 'system'.\n // * Setting a scope will also check for the users permission to use this scope.\n // */\n // getCatalog(qname: string, scope?: 'admin' | 'system'): Observable<Catalog> {\n // const ctrl = scope && this.userHasScopePermissions(scope) ? scope : 'dms';\n // return this.backend.get(`/${ctrl}/catalogs/${qname}`).pipe(\n // catchError((e) => {\n // if (e.status === 404) {\n // return of({ entries: [] });\n // } else {\n // throw e;\n // }\n // }),\n // map((res: { tenant?: string; entries: CatalogEntry[]; readonly: boolean }) => ({\n // qname: qname,\n // entries: res.entries,\n // tenant: res.tenant,\n // readonly: res.readonly\n // }))\n // );\n // }\n\n // getCustomCatalog(uri: string): Observable<BaseCatalog> {\n // return this.backend.get(uri, ApiBase.none).pipe(\n // catchError((e) => {\n // if (e.status === 404) {\n // return of({ entries: [] });\n // } else {\n // throw e;\n // }\n // }),\n // map((res: { entries: CatalogEntry[]; readonly: boolean }) => ({\n // entries: res.entries,\n // readonly: res.readonly\n // }))\n // );\n // }\n\n // /**\n // * Updates an existing catalog.\n // * @param name The catalogs name\n // * @param patches A collection of JSON-Pathes. See http://jsonpatch.com/ for details\n // * @param namespace Optional namespace\n // */\n // patch(qname: string, patches: any[]): Observable<Catalog> {\n // this.backend.setHeader('Content-Type', 'application/json-patch+json');\n // return this.backend.patch(`/dms/catalogs/${qname}`, patches).pipe(\n // map((res: Catalog) => ({\n // qname: qname,\n // entries: res.entries,\n // tenant: res.tenant\n // })),\n // tap((catalog: Catalog) => {\n // this.backend.setHeader('Content-Type', 'application/json');\n // })\n // );\n // }\n\n // /**\n // * Saves a whole catalog. This will overwrite the existing catalog with the entries\n // * provided or create a new catalog.\n // * @param catalog The catalog to be saved\n // * @param scope The scope to be used. This decides which controller\n // * will be used to post data to. Possibe values: 'admin' or 'system'.\n // * Setting a scope will also check for the users permission to use this scope.\n // */\n // post(catalog: Catalog, scope?: 'admin' | 'system'): Observable<Catalog> {\n // const ctrl = scope && this.userHasScopePermissions(scope) ? scope : 'dms';\n // return this.backend\n // .post(`/${ctrl}/catalogs/${catalog.qname}`, {\n // entries: catalog.entries\n // })\n // .pipe(\n // map(() => {\n // catalog.tenant = this.userService.getCurrentUser().tenant;\n // return catalog;\n // })\n // );\n // }\n\n // /**\n // * Checks whether or not particular entries of a catalog are in use.\n // * @param qname The catalogs qualified name\n // * @param values The entries to be checked\n // * @returns An array of entries that are in use\n // */\n // inUse(qname: string, values: string[]): Observable<string[]> {\n // const queryParams = values.map((v) => `entries=${encodeURIComponent(v)}`);\n // return this.backend.get(`/dms/catalogs/${qname}/validate?${queryParams.join('&')}`);\n // }\n}\n","import { Injectable, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { filter, fromEvent, map, merge, Observable, ReplaySubject } from 'rxjs';\nimport { DmsObject } from '../../model/dms-object.model';\nimport { ClipboardData, ClipboardDataMode, ClipboardStore } from './clipboard.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ClipboardService {\n #emptyClipboard: ClipboardStore = {\n buckets: undefined,\n main: undefined\n };\n\n #clipboard: ClipboardStore = structuredClone(this.#emptyClipboard);\n #clipboardSource = new ReplaySubject<ClipboardStore>();\n #clipboard$ = this.#clipboardSource.asObservable();\n\n #pasteEvents = merge(\n fromEvent<KeyboardEvent>(window, 'keydown').pipe(filter((event: KeyboardEvent) => event.ctrlKey && event.code === 'KeyV')),\n fromEvent<ClipboardEvent>(window, 'paste').pipe(filter((event: ClipboardEvent) => !!event.clipboardData && event.clipboardData.files.length > 0))\n );\n\n clipboard(bucket?: string): Signal<ClipboardData | undefined> {\n return toSignal(this.clipboard$(bucket));\n }\n\n clipboard$(bucket?: string): Observable<ClipboardData | undefined> {\n return this.#clipboard$.pipe(\n map((cs: ClipboardStore) => {\n if (bucket) {\n return cs.buckets ? cs.buckets[bucket] : undefined;\n } else return cs.main;\n })\n );\n }\n\n paste$(bucket?: string): Observable<ClipboardData> {\n return this.#pasteEvents.pipe(\n map((e: KeyboardEvent | ClipboardEvent) => {\n let cd: ClipboardData | undefined;\n if (e instanceof ClipboardEvent) {\n const fileList: FileList = e.clipboardData!.files;\n const files: File[] = [];\n for (let i = 0; i < fileList.length; i++) {\n files.push(fileList.item(i) as File);\n }\n\n cd = files.length\n ? {\n files\n }\n : undefined;\n } else {\n cd = bucket ? (this.#clipboard.buckets ? this.#clipboard.buckets[bucket] : undefined) : this.#clipboard.main;\n }\n return cd;\n }),\n filter((cd: any) => cd !== undefined && (cd.files || cd.objects)),\n map((cd: ClipboardData) => cd)\n );\n }\n\n getClipboardData(bucket?: string): ClipboardData | undefined {\n if (bucket) {\n return this.#clipboard.buckets ? this.#clipboard.buckets[bucket] : undefined;\n } else return this.#clipboard.main;\n }\n\n /**\n * Add objects to the clipboard\n * @param bucket Buckets are ways to separate data from the global scope.\n * If you have an app that would like to have a separate section in the clipboard\n * you'll use a unique bucket to store your stuff. When observing chages to the\n * clipboard you couls as well provide the bucket and you will only get\n */\n addObjects(objects: DmsObject[], mode: ClipboardDataMode, bucket?: string) {\n const cd: ClipboardData = { mode, objects };\n if (bucket) {\n if (!this.#clipboard.buckets) this.#clipboard.buckets = {};\n this.#clipboard.buckets[bucket] = cd;\n } else this.#clipboard.main = cd;\n this.#clipboardSource.next(this.#clipboard);\n }\n\n clear(bucket?: string) {\n if (bucket && this.#clipboard.buckets) {\n delete this.#clipboard.buckets[bucket];\n } else {\n this.#clipboard = structuredClone(this.#emptyClipboard);\n }\n this.#clipboardSource.next(this.#clipboard);\n }\n\n async addToNavigatorClipBoard(data: string) {\n try {\n await navigator.clipboard.writeText(data);\n //console.log('Text copied to clipboard');\n } catch (error) {\n console.error('Failed to copy text: ', error);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { fromEvent, Observable, ReplaySubject } from 'rxjs';\n\n/**\n * Service to monitor the online/offline state of the application. \n * It listens to the browser's online and offline events and provides an observable\n * to track the current connection state.\n * \n * An observable `connection$` is provided which emits the current connection state\n * whenever the online or offline state changes. The initial state is determined by\n * the `window.navigator.onLine` property.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ConnectionService {\n private currentState: ConnectionState = {\n isOnline: window.navigator.onLine\n };\n private connectionStateSource = new ReplaySubject<ConnectionState>();\n public connection$: Observable<ConnectionState> = this.connectionStateSource.asObservable();\n /**\n * @ignore\n */\n constructor() {\n this.connectionStateSource.next(this.currentState);\n fromEvent(window, 'online').subscribe(() => {\n this.currentState.isOnline = true;\n this.connectionStateSource.next(this.currentState);\n });\n\n fromEvent(window, 'offline').subscribe(() => {\n this.currentState.isOnline = false;\n this.connectionStateSource.next(this.currentState);\n });\n }\n}\n/**\n * Check a connection state of a client\n */\nexport interface ConnectionState {\n /**\n * whether or not the application is online.\n */\n isOnline: boolean;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { forkJoin, of } from 'rxjs';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\nimport { Utils } from '../../util/utils';\nimport { AuthService } from '../auth/auth.service';\nimport { YuvConfig } from '../config/config.interface';\nimport { ConfigService } from '../config/config.service';\nimport { CORE_CONFIG } from '../config/core-config.tokens';\nimport { Logger } from '../logger/logger.service';\n\n/**\n * Providing functions,that are are injected at application startup and executed during app initialization.\n */\nexport const init_moduleFnc = () => {\n const coreConfig = inject(CORE_CONFIG);\n const logger = inject(Logger);\n const http = inject(HttpClient);\n const configService = inject(ConfigService);\n const authService = inject(AuthService);\n authService.setInitialRequestUri();\n return coreConfig.main\n ? !Array.isArray(coreConfig.main)\n ? of([coreConfig.main])\n : forkJoin(\n [...(coreConfig.main as string[])].map((uri: string) =>\n http.get(`${Utils.getBaseHref()}${uri}`).pipe(\n catchError((e: any) => {\n logger.error('failed to catch config file', e);\n return of({});\n }),\n map((res: any) => res as YuvConfig)\n )\n )\n ).pipe(\n // switchMap((configs: YuvConfig[]) => configService.extendConfig(configs)),\n tap((configs: YuvConfig[]) => configService.extendConfig(configs)),\n switchMap(() =>\n authService.initUser().pipe(\n catchError((e) => {\n authService.initError = {\n status: e.status,\n key: e.error.error\n };\n return of(true);\n })\n )\n )\n )\n : of(false);\n};\n","export enum DeviceScreenOrientation {\n PORTRAIT = 'portrait',\n LANDSCAPE = 'landscape'\n}\n\n\nexport interface DeviceScreen {\n size: ScreenSize;\n orientation: DeviceScreenOrientation\n width: number;\n height: number;\n}\n\nexport interface DeviceScreenBounds {\n width: number;\n height: number;\n}\n\nexport type ScreenSize = 's' | 'm' | 'l' | 'xl';\n\n\n","import { inject, Injectable, signal } from '@angular/core';\nimport { DeviceDetectorService, DeviceInfo } from 'ngx-device-detector';\nimport { debounceTime, fromEvent, Observable, ReplaySubject } from 'rxjs';\nimport { DeviceScreen, DeviceScreenBounds, DeviceScreenOrientation, ScreenSize } from './device.interface';\n/**\n * @deprecated This service is deprecated. Please use the DeviceService from the `@yuuvis/material` package instead.\n *\n * This service is used to adapt styles and designs of the client to\n * different devices and screen sizes.\n *\n * Using `screenChange$` observable you are able to monitor changes to\n * the screen size and act upon it.\n *\n * This service will also adds attributes to the body tag that reflect the\n * current screen/device state. This way you can apply secific styles in your\n * css files for different screen resolutions and orientations.\n *\n * Attributes applied to the body tag are:\n *\n * - `data-screen` - [s, m, l, xl] - for different screen sizes\n * (s: for mobile phone like screen sizes, m: for tablet like screen\n * sizes, 'l': for desktop like screen sizes, 'xl': for screen sizes exceeding\n * the desktop screen size).\n *\n * - `data-orientation` - [portrait, landscape] - for the current screen orientation\n *\n * - `data-touch-enabled` - [true] - if the device has touch capabilities (won't be added if the device doesn't have touch capabilities)\n *\n * ```html\n * <body data-screen-size=\"s\" data-screen-orientation=\"portrait\" data-touch-enabled=\"true\">\n * ...\n * </body>\n * ```\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceService {\n #deviceDetectorService = inject(DeviceDetectorService);\n\n #upperScreenBoundary = {\n small: 600,\n mediumPortrait: 900,\n mediumLandscape: 1200,\n large: 1800\n };\n\n #resize$ = fromEvent(window, 'resize').pipe(debounceTime(this.#getDebounceTime()));\n #screen?: DeviceScreen;\n #screenSource = new ReplaySubject<DeviceScreen>(1);\n screenChange$: Observable<DeviceScreen> = this.#screenSource.asObservable();\n\n /**\n * Signal to indicate if the screen size is small (e.g. mobile phone).\n * This will only be triggered if `supportsSmallScreens` is set to true.\n * Major components will use this metric to adapt to 'small screen behavior' and so can you\n */\n smallScreenLayout = signal<boolean>(false);\n #supportsSmallScreens = signal<boolean>(false);\n\n /**\n * if the device is a mobile device (android / iPhone / windows-phone etc)\n */\n isMobile: boolean = this.#deviceDetectorService.isMobile();\n /**\n * if the device us a tablet (iPad etc)\n */\n isTablet: boolean = this.#deviceDetectorService.isTablet();\n /**\n * if the app is running on a Desktop browser\n */\n isDesktop: boolean = this.#deviceDetectorService.isDesktop();\n info?: DeviceInfo = this.#deviceDetectorService.getDeviceInfo();\n isTouchEnabled = this.#isTouchEnabled();\n\n constructor() {\n this.#resize$.subscribe((e: Event) => {\n this.#setScreen();\n });\n }\n\n init(supportsSmallScreens: boolean = false): void {\n this.#supportsSmallScreens.set(supportsSmallScreens);\n this.#setScreen();\n }\n\n #isTouchEnabled() {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n }\n\n #setScreen(): void {\n const bounds: DeviceScreenBounds = {\n width: window.innerWidth,\n height: window.innerHeight\n };\n let orientation: DeviceScreenOrientation = bounds.width >= bounds.height ? DeviceScreenOrientation.LANDSCAPE : DeviceScreenOrientation.PORTRAIT;\n\n if (this.isMobile && window.screen['orientation']) {\n const screenOrientation = window.screen['orientation'].type;\n if (screenOrientation === 'landscape-primary' || screenOrientation === 'landscape-secondary') {\n orientation = DeviceScreenOrientation.LANDSCAPE;\n } else if (screenOrientation === 'portrait-primary' || screenOrientation === 'portrait-secondary') {\n orientation = DeviceScreenOrientation.PORTRAIT;\n }\n }\n this.#screen = {\n size: this.#getScreenSize(bounds, orientation),\n orientation,\n width: bounds.width,\n height: bounds.height\n };\n this.#screenSource.next(this.#screen);\n this.smallScreenLayout.set(this.#supportsSmallScreens() && this.#screen.size === 's' && this.#screen.orientation === 'portrait');\n this.#setupDOM(this.#screen);\n // force change detection because resize will not be recognized by Angular in some cases\n // TODO: check: causes recursive ticks in some cases ...\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n setTimeout(() => {}, 0);\n }\n\n #setupDOM(screen: DeviceScreen) {\n const body: HTMLBodyElement = document.querySelector('body') as HTMLBodyElement;\n body.setAttribute('data-screen-size', screen.size);\n body.setAttribute('data-screen-orientation', screen.orientation);\n if (this.isTouchEnabled) body.setAttribute('data-touch-enabled', 'true');\n else body.removeAttribute('data-touch-enabled');\n }\n\n #getScreenSize(bounds: DeviceScreenBounds, orientation: DeviceScreenOrientation): ScreenSize {\n if (this.#isBelow(this.#upperScreenBoundary.small, bounds)) {\n return 's';\n } else if (this.#isBelow(orientation === 'landscape' ? this.#upperScreenBoundary.mediumLandscape : this.#upperScreenBoundary.mediumPortrait, bounds)) {\n return 'm';\n } else if (this.#isBelow(this.#upperScreenBoundary.large, bounds)) {\n return 'l';\n } else {\n return 'xl';\n }\n }\n\n #isBelow(size: number, bounds: DeviceScreenBounds): boolean {\n const landscape = bounds.width < this.#upperScreenBoundary.large ? bounds.width >= bounds.height : false;\n return (landscape && bounds.height < size) || (!landscape && bounds.width < size);\n }\n\n #getDebounceTime() {\n // on mobile devices resize only happens when rotating the device or when\n // keyboard appears, so we dont't need to debounce\n return this.isMobile ? 0 : 500;\n }\n}\n","import { HttpClient, HttpErrorResponse, HttpEvent, HttpEventType, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, ReplaySubject, Subject, throwError } from 'rxjs';\nimport { catchError, filter, map, scan, tap } from 'rxjs/operators';\nimport { Utils } from '../../util/utils';\nimport { BackendService } from '../backend/backend.service';\nimport { Logger } from '../logger/logger.service';\nimport { BaseObjectTypeField } from '../system/system.enum';\nimport { CreatedObject, ProgressStatus, UploadResult } from './upload.interface';\n\nconst transformResponse = () => map((res: CreatedObject) => (res && res.body ? res.body.objects.map((val) => val) : null));\n\n/**\n * Service for providing upload of different object types into a client.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class UploadService {\n readonly #backend = inject(BackendService);\n readonly #http = inject(HttpClient);\n readonly #logger = inject(Logger);\n\n #status: ProgressStatus = { err: 0, items: [] };\n #statusSource = new ReplaySubject<ProgressStatus>();\n status$: Observable<ProgressStatus> = this.#statusSource.pipe(scan((acc: ProgressStatus, newVal) => ({ ...acc, ...newVal }), this.#status));\n #uploadStatus = new BehaviorSubject<boolean | null>(null);\n uploadStatus$: Observable<boolean | null> = this.#uploadStatus.asObservable();\n\n /**\n * Upload a file.\n * @param url The URL to upload the file to\n * @param file The file to be uploaded\n * @param label A label that will show up in the upload overlay dialog while uploading\n */\n upload(url: string, file: File, label?: string, silent?: boolean): Observable<any> {\n return this.#executeUpload(url, file, label || file.name, silent);\n }\n\n /**\n * Upload files using multipart upload.\n * @param url The URL to upload the files to\n * @param files The files to be uploaded\n * @param data Data to be send along with the files\n * @param label A label that will show up in the upload overlay dialog while uploading\n */\n uploadMultipart(url: string, files: File[], data?: any, label?: string, silent?: boolean): Observable<any> {\n return this.#executeMultipartUpload(url, files, label || 'Upload', data, silent);\n }\n\n createDocument(url: string, data: any): Observable<any> {\n const formData: FormData = this.#createFormData({ data });\n const request = this.#createHttpRequest(url, { formData }, false);\n return this.#http.request(request).pipe(\n filter((obj: any) => obj && obj.body),\n transformResponse(),\n catchError((err) => throwError(() => err))\n );\n }\n\n /**\n * Cancels an upload request and removes it from the list of files being uploaded.\n * @param id ID of the UploadItem to be canceled\n */\n cancelItem(id?: string) {\n if (id) {\n const match = this.#status.items.find((i) => i.id === id);\n if (match) {\n match.subscription.unsubscribe();\n this.#status.items = this.#status.items.filter((i) => i.id !== id);\n }\n } else {\n this.#status.items.forEach((element) => element.subscription.unsubscribe());\n this.#status.items = [];\n }\n this.#status.err = this.#status.items.filter((i) => i.err).length;\n this.#statusSource.next(this.#status);\n }\n\n /**\n * Prepares Formdata for multipart upload.\n * @param from contains form and or file\n */\n #createFormData({ file, data }: { data?: any; file?: File[] }): FormData {\n const formData: FormData = new FormData();\n (file || []).forEach((f) => formData.append('files', f, f.name));\n data ? formData.append('data', new Blob([JSON.stringify(data)], { type: 'application/json' })) : null;\n return formData;\n }\n\n /**\n * Prepares Http Request.\n * @param url The URL to upload the file to\n * @param content formdata or single file\n * @param reportProgress Request should report upload progress\n * @param method Request method\n */\n #createHttpRequest(url: string, content: Partial<{ formData: FormData; file: File }>, reportProgress: boolean, method = 'POST'): HttpRequest<any> {\n const { formData, file } = content;\n // add request param to bypass the serviceworker\n url += `${url.indexOf('?') === -1 ? '?' : '&'}ngsw-bypass=1`;\n\n let headers = this.#backend.getAuthHeaders();\n if (file) {\n headers = headers.set('Content-Disposition', `attachment; filename*=utf-8''${encodeURIComponent(file.name)}`);\n }\n\n return new HttpRequest(method, url, file || formData, { headers, reportProgress });\n }\n\n /**\n * Prepares single file POST upload.\n * @param url The URL to upload the file to\n * @param file The file to be uploaded\n * @param label A label that will show up in the upload overlay dialog while uploading\n */\n #executeUpload(url: string, file: File, label: string, silent = false): Observable<any> {\n const request = this.#createHttpRequest(url, { file }, !silent);\n return silent\n ? this.#http.request(request).pipe(filter((res) => res instanceof HttpResponse))\n : this.#startUploadWithFile(request, label).pipe(transformResponse());\n }\n\n /**\n * Prepare multipart upload.\n * @param url The URL to upload the file to\n * @param file Array of files to be uploaded\n * @param label A label that will show up in the upload overlay dialog while uploading\n * @param data Data to be send along with the files\n */\n #executeMultipartUpload(url: string, file: File[], label: string, data?: any, silent = false): Observable<any> {\n const formData: FormData = this.#createFormData({ file, data });\n const request = this.#createHttpRequest(url, { formData }, !silent);\n return silent\n ? this.#http.request(request).pipe(filter((res) => res instanceof HttpResponse))\n : this.#startUploadWithFile(request, label).pipe(transformResponse());\n }\n\n #generateResult(result: CreatedObject): UploadResult[] {\n const objects = result.body?.objects;\n if (objects && objects.length > 1) {\n const data = objects[0];\n // const bp = this.#system.getBaseProperties();\n // const label = data.properties[bp.title] ? data.properties[bp.title].value : '...';\n // TODO: Get the label from somewhere\n const label = '...';\n return [\n {\n objectId: objects.map((val: any) => val.properties[BaseObjectTypeField.OBJECT_ID].value),\n contentStreamId: data.contentStreams![0]?.contentStreamId,\n filename: data.contentStreams![0]?.fileName,\n label: `(${objects.length}) ${label}`\n }\n ];\n } else {\n return result.body!.objects.map((o) => ({\n objectId: o.properties[BaseObjectTypeField.OBJECT_ID].value,\n contentStreamId: o.contentStreams![0]?.contentStreamId,\n filename: o.contentStreams![0]?.fileName,\n // label: o.properties[bp.title] ? o.properties[bp.title].value : o.contentStreams![0]?.fileName\n // TODO: Get the label from somewhere\n label: o.contentStreams![0]?.fileName\n }));\n }\n }\n\n #createProgressStatus(event: any, progress: Subject<number>, id: string) {\n if (event.type === HttpEventType.UploadProgress) {\n const percentDone = Math.round((100 * event.loaded) / event.total);\n progress.next(percentDone);\n } else if (event instanceof HttpResponse) {\n progress.complete();\n // add upload response\n // this.status.items = this.status.items.filter(s => s.id !== id);\n const idx = this.#status.items.findIndex((s) => s.id === id);\n if (idx !== -1) {\n this.#status.items[idx].result = this.#generateResult(event);\n this.#statusSource.next(this.#status);\n }\n }\n }\n\n #createUploadError(err: HttpErrorResponse, progress: Subject<number>, id: string): Observable<HttpErrorResponse> {\n const statusItem = this.#status.items.find((s) => s.id === id);\n statusItem!.err = {\n code: err.status,\n message: err.error ? err.error.errorMessage : err.message\n };\n this.#logger.error('upload failed', statusItem);\n this.#status.err++;\n this.#statusSource.next(this.#status);\n progress.next(0);\n return throwError(() => new Error(err.message));\n }\n\n /**\n * Actually starts the upload process.\n * @param request Request to be executed\n * @param label A label that will show up in the upload overlay dialog while uploading\n */\n #startUploadWithFile(request: any, label: string): Observable<CreatedObject> {\n return new Observable((o: any) => {\n const id = Utils.uuid();\n const progress = new Subject<number>();\n let result: any;\n // Create a subscription from the http request that will be applied to the upload\n // status item in order to be able to cancel the request later on.\n this.#uploadStatus.next(false);\n const subscription = this.#http\n .request(request)\n .pipe(\n catchError((err: HttpErrorResponse) => this.#createUploadError(err, progress, id)),\n tap((event: HttpErrorResponse | HttpEvent<unknown>) => this.#createProgressStatus(event, progress, id))\n )\n // actual return value of this function\n .subscribe({\n next: (res: any) => (res.status ? (result = res) : null),\n error: (err) => {\n o.error(err);\n this.#uploadStatus.next(true);\n o.complete();\n },\n complete: () => {\n o.next(result);\n this.#uploadStatus.next(true);\n o.complete();\n }\n });\n\n this.#status.items.push({\n id,\n filename: label,\n progress: progress.asObservable(),\n subscription,\n err: undefined\n });\n this.#statusSource.next(this.#status);\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { delay, map, switchMap, tap } from 'rxjs/operators';\nimport { DmsObject } from '../../model/dms-object.model';\nimport { Utils } from '../../util/utils';\nimport { Sort } from '../../util/utils.helper.enum';\nimport { ApiBase } from '../backend/api.enum';\nimport { HttpOptions } from '../backend/backend.interface';\nimport { BackendService } from '../backend/backend.service';\nimport { EventService } from '../event/event.service';\nimport { YuvEventType } from '../event/events';\nimport { SearchService } from '../search/search.service';\nimport { SearchResponse, SearchResult, SearchResultContent, SearchResultItem } from '../search/search.service.interface';\nimport { BaseObjectTypeField, ContentStreamField, SystemResult } from '../system/system.enum';\nimport { UploadService } from '../upload/upload.service';\nimport {\n CoreApiObject,\n CoreApiObjectProperty,\n CoreApiResponse,\n ObjectCopyOptions,\n ObjectDeleteOptions,\n ObjectDeleteResult,\n ObjectMoveOptions,\n ObjectOptions\n} from './dms.service.interface';\nimport { DmsObjectTag } from '../../model/dms-object.interface';\n/**\n * Service for working with dms objects: create them, delete, etc.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DmsService {\n #searchService = inject(SearchService);\n #backend = inject(BackendService);\n #eventService = inject(EventService);\n #uploadService = inject(UploadService);\n\n // general trigger operator to handle all dms events\n private triggerEvent(event: YuvEventType, id?: string, silent = false) {\n return (stream: any): Observable<any> =>\n stream.pipe(\n // update does not return permissions, so we need to re-load the whole dms object\n // TODO: Remove once permissions are provided\n switchMap((res) => (!id ? of(res) : this.getDmsObject(id))),\n // TODO: enable once permissions are provided\n // map((res) => this.searchResultToDmsObject(this.searchService.toSearchResult(res).items[0])),\n tap((res: any) => !silent && this.#eventService.trigger(event, res))\n );\n }\n\n // general trigger operator to handle all dms events\n #triggerEvents(event: YuvEventType, ids?: string[], silent = false) {\n return (stream: any): Observable<any> =>\n stream.pipe(\n // update does not return permissions, so we need to re-load the whole dms object\n // TODO: Remove once permissions are provided\n switchMap((res) => (!ids ? of(res) : this.getDmsObjects(ids))),\n // TODO: enable once permissions are provided\n // map((_res: any[]) => _res.map((res, i) => res?._error ? { ...res, id: ids?[i] } : this.searchResultToDmsObject(this.searchService.toSearchResult(res).items[0]))),\n map((_res: any[]) => _res.map((res, i) => (res?._error && ids ? { ...res, id: ids[i] } : res))),\n tap((res: any) => !silent && res.forEach((o: any) => o && this.#eventService.trigger(event, o)))\n );\n }\n\n /**\n * Create new dms object(s). Providing an array of files here instead of one will create\n * a new dms object for every file. In this case indexdata will shared across all files.\n * @param objectTypeId The ID of the object type to be created\n * @param indexdata Indexdata for the new object(s)\n * @param files File(s) to create dms objects content(s) with\n * @param label A label that will show up in the upload overlay dialog while uploading\n *\n * @returns Array of IDs of the objects that have been created\n */\n createDmsObject(\n objectTypeId: string,\n indexdata: any,\n files: File[],\n label?: string,\n silent = false,\n options: ObjectOptions = { waitForSearchConsistency: true }\n ): Observable<string[]> {\n const url = `${this.#backend.getApiBase(ApiBase.apiWeb)}/dms/objects${options.waitForSearchConsistency ? '?waitForSearchConsistency=true' : ''}`;\n const data = indexdata;\n data[BaseObjectTypeField.OBJECT_TYPE_ID] = objectTypeId;\n\n const upload = files.length ? this.#uploadService.uploadMultipart(url, files, data, label, silent) : this.#uploadService.createDocument(url, data);\n\n return upload\n .pipe(\n map((res) => res.map((r: any) => r.properties[BaseObjectTypeField.OBJECT_ID].value)),\n // TODO: Replace by proper solution\n // Right now there is a gap between when the object was\n // created and when it is indexed. So delaying here will\n // give backend time to get its stuff together.\n delay(1000)\n )\n .pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_CREATED, '', silent));\n }\n\n /**\n * Delete a dms object.\n * @param id ID of the object to be deleted\n */\n deleteDmsObject(id: string, silent = false): Observable<any> {\n const url = `/dms/objects/${id}`;\n return this.#backend\n .delete(url, ApiBase.apiWeb)\n .pipe(map(() => ({ id })))\n .pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_DELETED, '', silent));\n }\n\n /**\n * Restore older version of a dms object.\n * @param id ID of the object to be restored\n * @param version version of the object to be restored\n */\n restoreDmsObject(id: string, version: number, silent = false): Observable<any> {\n const url = `/dms/objects/${id}/versions/${version}/actions/restore?waitForSearchConsistency=true&restoreParentId=false`;\n return this.#backend.post(url, {}, ApiBase.apiWeb).pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_UPDATED, id, silent));\n }\n\n /**\n * Upload (add/replace) content to a dms object.\n * @param objectId ID of the dms object to upload the file to\n * @param file The file to be uploaded\n * @param label A label that will show up in the upload overlay dialog while uploading\n */\n uploadContent(objectId: string, file: File, label?: string, silent?: boolean): Observable<any> {\n return this.#uploadService.upload(this.getContentPath(objectId), file, label, silent).pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_UPDATED, objectId));\n }\n\n /**\n * Path of dms object content file.\n * @param objectId ID of the dms object\n * @param version version number of the dms object\n */\n getContentPath(objectId: string, version?: number) {\n return `${this.#backend.getApiBase(ApiBase.apiWeb)}/dms/objects/${objectId}/contents/file${version ? '?version=' + version : ''}`;\n }\n\n /**\n * Original API Path of dms object content file.\n * @param objectId ID of the dms object\n * @param version version number of the dms object\n * @param rendition should return rendition path of the dms object\n */\n getFullContentPath(objectId: string, version?: number, rendition = false) {\n return `${this.#backend.getApiBase(ApiBase.core, true)}/dms/objects/${objectId}${version ? '/versions/' + version : ''}/contents/${\n rendition ? 'renditions/pdf' : 'file'\n }`;\n }\n\n getSlideURI(objectId: string, mimeType?: string): string | undefined {\n const supportedMimeTypes = ['*/*'];\n let supported = false;\n if (mimeType) {\n // check if mime type supports slides\n supportedMimeTypes.forEach((p) => (supported = supported || Utils.patternToRegExp(p).test(mimeType)));\n }\n return !mimeType || supported ? `${this.#backend.getApiBase(ApiBase.core, true)}/dms/objects/${objectId}/contents/renditions/slide` : undefined;\n }\n\n /**\n * Downloads the content of dms objects.\n *\n * @param DmsObject[] dmsObjects Array of dms objects to be downloaded\n * @param withVersion should download specific version of the object\n */\n downloadContent(objects: DmsObject[], withVersion?: boolean) {\n objects.forEach((object, i) =>\n setTimeout(\n () => {\n const uri = `${this.getContentPath(object?.id, withVersion ? object?.version : undefined)}`;\n this.#backend.download(uri);\n },\n Utils.isSafari() ? i * 1000 : 0 // Safari does not allow multi download\n )\n );\n }\n\n /**\n * Fetch a dms object.\n * @param id ID of the object to be retrieved\n * @param version Desired version of the object\n */\n getDmsObject(id: string, version?: number, silent = false, requestOptions?: HttpOptions | undefined): Observable<DmsObject> {\n return this.#backend\n .get(`/dms/objects/${id}${version ? '/versions/' + version : ''}`, undefined, requestOptions)\n .pipe(\n map((res) => {\n const item: SearchResultItem = this.#searchService.toSearchResult(res).items[0];\n return this.#searchResultToDmsObject(item);\n })\n )\n .pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_LOADED, '', silent));\n }\n\n /**\n * Get tags of a dms object.\n * @param objectData Data field of the dms object\n */\n getDmsObjectTags(objectData: Record<string, unknown>): DmsObjectTag[] {\n return ((objectData[BaseObjectTypeField.TAGS] as any[]) || []).map((row: any[]) => ({\n name: row[0] as string,\n state: row[1] as number,\n creationDate: new Date(row[2] as string),\n traceId: row[3] as string\n }));\n }\n\n /**\n * Updates a tag on a dms object.\n * @param id The ID of the object\n * @param tag The tag to be updated\n * @param value The tags new value\n */\n setDmsObjectTag(id: string, tag: string, value: any, silent = false): Observable<any> {\n return this.#backend\n .post(`/dms/objects/tags/${tag}/state/${value}?query=SELECT * FROM system:object WHERE system:objectId='${id}'`, {}, ApiBase.core)\n .pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_UPDATED, id, silent));\n }\n\n /**\n * Deletes a tag from a dms object.\n * @param id The ID of the object\n * @param tag The tag to be deleted\n */\n deleteDmsObjectTag(id: string, tag: string, silent = false): Observable<any> {\n return this.#backend.delete(`/dms/objects/${id}/tags/${tag}`, ApiBase.core).pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_UPDATED, id, silent));\n }\n\n /**\n * Update indexdata of a dms object.\n * @param id ID of the object to apply the data to\n * @param data Indexdata to be applied\n * @param silent flag to trigger DMS_OBJECT_UPDATED event\n */\n updateDmsObject(id: string, data: any, silent = false, options: ObjectOptions = { waitForSearchConsistency: true }): Observable<DmsObject> {\n const url = `/dms/objects/${id}${options.waitForSearchConsistency ? '?waitForSearchConsistency=true' : ''}`;\n return this.#backend.patch(url, data).pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_UPDATED, id, silent));\n }\n\n /**\n * Updates given objects.\n * @param objects the objects to updated\n */\n updateDmsObjects(\n objects: { id: string; data: { [key: string]: any } }[],\n silent = false,\n options: ObjectOptions = { waitForSearchConsistency: true }\n ): Observable<DmsObject[]> {\n const url = `/dms/objects${options.waitForSearchConsistency ? '?waitForSearchConsistency=true' : ''}`;\n return this.#backend\n .patch(url, {\n patches: objects.map((o) => ({\n id: o.id,\n data: o.data\n }))\n })\n .pipe(\n this.#triggerEvents(\n YuvEventType.DMS_OBJECT_UPDATED,\n objects.map((o) => o.id),\n silent\n )\n );\n }\n\n /**\n * Updates a tag on a dms object.\n * @param ids List of IDs of objects\n * @param tag The tag to be updated\n * @param value The tags new value\n */\n updateDmsObjectsTag(ids: string[], tag: string, value: any, silent = false): Observable<any> {\n return this.batchUpdateTag(ids, tag, value).pipe(this.#triggerEvents(YuvEventType.DMS_OBJECT_UPDATED, ids, silent));\n }\n\n /**\n * Moves given objects to a different folder.\n * @param folderId the id of the new parent folder\n * @param objects objects to be moved\n * @param options options for the move operation\n */\n moveDmsObjects(targetFolderId: string | null, objects: DmsObject[], options?: ObjectMoveOptions): Observable<any> {\n return this.updateDmsObjects(objects.map((o) => ({ id: o.id, data: { [BaseObjectTypeField.PARENT_ID]: targetFolderId } }), true)).pipe(\n tap((res) => !options?.silent && this.#eventService.trigger(YuvEventType.DMS_OBJECTS_MOVED, res))\n );\n }\n\n /**\n * Copy given objects to a different folder. The objects will be copied with their indexdata referencing\n * the existing content of the source object.\n * @param targetFolderId The ID of the target folder\n * @param objects The objects to be copied\n * @param options options for the copy operation\n */\n copyDmsObjects(targetFolderId: string | null, objects: DmsObject[], options?: ObjectCopyOptions): Observable<CoreApiResponse> {\n const excludeProperties = [\n BaseObjectTypeField.OBJECT_ID,\n BaseObjectTypeField.CREATED_BY,\n BaseObjectTypeField.CREATION_DATE,\n BaseObjectTypeField.MODIFIED_BY,\n BaseObjectTypeField.MODIFICATION_DATE,\n BaseObjectTypeField.VERSION_NUMBER,\n BaseObjectTypeField.TRACE_ID,\n BaseObjectTypeField.PARENT_OBJECT_TYPE_ID,\n BaseObjectTypeField.PARENT_VERSION_NUMBER\n ];\n\n const mappedObjects: CoreApiObject[] = objects.map((o) => {\n o.data[BaseObjectTypeField.PARENT_ID] = targetFolderId;\n\n // Remove properties that are not allowed to be copied.\n // This also includes content stream fields bundled into the objects data field.\n // Properties ending with '_title' are also excluded as they are enrichment values\n // provided by API-Web.\n Object.keys(o.data)\n .filter((key) => key.endsWith('_title') || excludeProperties.includes(key) || Object.values(ContentStreamField).includes(key))\n .forEach((key) => Reflect.deleteProperty(o.data, key));\n\n // map filtered data field to data format required by the Core-API\n const properties = Object.keys(o.data).reduce(\n (acc, key) => {\n acc[key] = { value: o.data[key] };\n return acc;\n },\n {} as Record<string, CoreApiObjectProperty>\n );\n\n return {\n properties: properties,\n objectTypeId: o.objectTypeId,\n ...(o.content\n ? {\n contentStreams: [o.content]\n }\n : {})\n } as CoreApiObject;\n });\n\n const query = options\n ? Object.keys(options)\n .map((key: string) => `${key}=${(options as any)[key]}`)\n .join('&')\n : '';\n return this.#backend.post(`/dms/objects?${query}`, { objects: mappedObjects }, ApiBase.core);\n }\n\n /**\n * Get a bunch of dms objects.\n * @param ids List of IDs of objects to be retrieved\n */\n getDmsObjects(ids: string[], silent = false): Observable<DmsObject[]> {\n return this.batchGet(ids)\n .pipe(\n map((_res: any[]) =>\n _res.map((res, i) => (res?._error ? { ...res, id: ids[i] } : this.#searchResultToDmsObject(this.#searchService.toSearchResult(res).items[0])))\n )\n )\n .pipe(this.#triggerEvents(YuvEventType.DMS_OBJECT_LOADED, undefined, silent));\n }\n\n /**\n * Delete a bunch of dms objects.\n * @param ids List of IDs of objects to be deleted\n * @param options Options for the delete operation\n * @returns Array of delete results.\n */\n deleteDmsObjects(\n objects: string[] | { id: string; subject: string }[],\n\n options?: ObjectDeleteOptions\n ): Observable<ObjectDeleteResult[]> {\n const queryParams = options\n ? `?${Object.keys(options)\n .filter((k) => ['waitForSearchConsistency', 'greedy'].includes(k))\n .map((k) => `${k}=${(options as any)[k]}`)\n .join('&')}`\n : '';\n\n return this.#backend\n .delete(`/dms/objects${queryParams}`, ApiBase.core, {\n body: {\n objects: objects.map((o) => ({\n properties:\n typeof o === 'string'\n ? {\n 'system:objectId': {\n value: o\n }\n }\n : {\n 'system:objectId': { value: o.id },\n subject: { value: o.subject }\n }\n }))\n }\n })\n .pipe(\n map((res) =>\n res?.objects?.map((r: any) => {\n const v = r.options?.[SystemResult.DELETE];\n return {\n id: r.properties?.[BaseObjectTypeField.OBJECT_ID]?.value,\n properties: r.properties,\n ...(v?.httpStatusCode >= 400 ? { _error: { status: v.httpStatusCode, message: v.message } } : {})\n };\n })\n )\n )\n .pipe(this.#triggerEvents(YuvEventType.DMS_OBJECT_DELETED, undefined, options?.silent));\n }\n\n /**\n * Fetch a dms object versions.\n * @param id ID of the object to be retrieved\n */\n getDmsObjectVersions(id: string): Observable<DmsObject[]> {\n return this.#backend.get('/dms/objects/' + id + '/versions').pipe(\n map((res) => {\n const items: SearchResultItem[] = this.#searchService.toSearchResult(res).items || [];\n return items.map((item) => this.#searchResultToDmsObject(item));\n }),\n map((res) => res.sort(Utils.sortValues('version', Sort.DESC)))\n );\n }\n\n getDmsObjectVersion(id: string, version: number): Observable<DmsObject> {\n return this.#backend\n .get(`/dms/objects/${id}/versions/${version}`)\n .pipe(map((res) => this.#searchResultToDmsObject(this.#searchService.toSearchResult(res).items[0])));\n }\n\n coreApiResponseToDmsObject(res: CoreApiResponse): DmsObject {\n return this.#searchResultToDmsObject({\n objectTypeId: res.properties[BaseObjectTypeField.OBJECT_TYPE_ID].value as string,\n fields: new Map(Object.entries(res.properties)),\n content: res.contentStreams?.[0]\n });\n }\n\n #searchResultToDmsObject(resItem: SearchResultItem): DmsObject {\n return new DmsObject(resItem);\n }\n\n /**\n * Transforms a plain data object to a DmsObject.\n * @param data The plain data object\n * @returns DmsObject\n */\n toDmsObject(data: Record<string, unknown>): DmsObject {\n const fields = new Map<string, unknown>();\n Object.keys(data).forEach((key) => fields.set(key, data[key]));\n const item: SearchResultItem = {\n content: {\n contentStreamId: data[ContentStreamField.ID] as string,\n mimeType: data[ContentStreamField.MIME_TYPE] as string,\n fileName: data[ContentStreamField.FILENAME] as string,\n size: data[ContentStreamField.LENGTH] as number,\n digest: data[ContentStreamField.DIGEST] as string,\n repositoryId: data[ContentStreamField.REPOSITORY_ID] as string,\n range: data[ContentStreamField.RANGE] as string\n },\n objectTypeId: data[BaseObjectTypeField.OBJECT_TYPE_ID] as string,\n fields\n };\n return this.#searchResultToDmsObject(item);\n }\n\n batchUpdateTag(ids: string[], tag: string, value: any) {\n return this.#backend.batch(\n ids.map((id) => ({\n method: 'POST',\n uri: `/dms/objects/tags/${tag}/state/${value}?query=SELECT * FROM system:object WHERE system:objectId='${id}'`,\n base: ApiBase.core,\n body: {}\n }))\n );\n }\n\n batchDeleteTag(ids: string[], tag: string) {\n return this.#backend.batch(\n ids.map((id) => ({\n method: 'DELETE',\n uri: `/dms/objects/${id}/tags/${tag}`,\n base: ApiBase.core\n }))\n );\n }\n\n batchDelete(ids: string[]) {\n return this.#backend.batch(ids.map((id) => ({ method: 'DELETE', uri: `/dms/objects/${id}` })));\n }\n\n batchGet(ids: string[]) {\n return this.#backend.batch(ids.map((id) => ({ method: 'GET', uri: `/dms/objects/${id}` })));\n }\n\n /**\n * Map search result from the backend to applications SearchResult object\n * @param searchResponse The backend response\n */\n toSearchResult(searchResponse: SearchResponse): SearchResult {\n const resultListItems: SearchResultItem[] = [];\n const objectTypes: string[] = [];\n\n searchResponse.objects.forEach((o: any) => {\n const fields = new Map();\n // process properties section of result\n Object.keys(o.properties).forEach((key: string) => {\n let value = o.properties[key].value;\n if (o.properties[key].clvalue) {\n // table fields will have a clientValue too ...\n value = o.properties[key].clvalue;\n // ... and also may contain values that need to be resolved\n if (o.properties[key].resolvedValues) {\n value.forEach((v: any) => {\n Object.keys(v).forEach((k) => {\n const resValue = Array.isArray(v[k]) ? v[k].map((i: any) => o.properties[key].resolvedValues[i]) : o.properties[key].resolvedValues[v[k]];\n if (resValue) {\n v[`${k}_title`] = resValue;\n }\n });\n });\n }\n }\n\n fields.set(key, value);\n if (o.properties[key].title) {\n fields.set(key + '_title', o.properties[key].title);\n }\n });\n\n // process contentStreams section of result if available.\n // Objects that don't have files attached won't have this section\n let content: SearchResultContent | undefined;\n if (o.contentStreams && o.contentStreams.length > 0) {\n // we assume that each result object only has ONE file attached, altough\n // this is an array and there may be more\n const contentStream = o.contentStreams[0];\n // also add contentstream related fields to the result fields\n fields.set(ContentStreamField.LENGTH, contentStream.length);\n fields.set(ContentStreamField.MIME_TYPE, contentStream.mimeType);\n fields.set(ContentStreamField.FILENAME, contentStream.fileName);\n fields.set(ContentStreamField.ID, contentStream.contentStreamId);\n fields.set(ContentStreamField.RANGE, contentStream.contentStreamRange);\n fields.set(ContentStreamField.REPOSITORY_ID, contentStream.repositoryId);\n fields.set(ContentStreamField.DIGEST, contentStream.digest);\n fields.set(ContentStreamField.ARCHIVE_PATH, contentStream.archivePath);\n\n content = {\n contentStreamId: contentStream.contentStreamId,\n repositoryId: contentStream.repositoryId,\n range: contentStream.range,\n digest: contentStream.digest,\n archivePath: contentStream.archivePath,\n fileName: contentStream.fileName,\n mimeType: contentStream.mimeType,\n size: contentStream.length\n };\n }\n\n const objectTypeId = o.properties[BaseObjectTypeField.OBJECT_TYPE_ID] ? o.properties[BaseObjectTypeField.OBJECT_TYPE_ID].value : null;\n if (objectTypes.indexOf(objectTypeId) === -1) {\n objectTypes.push(objectTypeId);\n }\n\n resultListItems.push({\n objectTypeId,\n content,\n fields,\n permissions: o.permissions\n });\n });\n\n const result: SearchResult = {\n hasMoreItems: searchResponse.hasMoreItems,\n totalNumItems: searchResponse.totalNumItems,\n items: resultListItems,\n objectTypes\n };\n return result;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { map, Observable } from 'rxjs';\nimport { BackendService } from '../backend/backend.service';\nimport { OrganizationSetEntry } from './idm.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IdmService {\n #backend = inject(BackendService);\n\n queryOrganizationEntity(term: string, targetTypes: string[], size?: number): Observable<OrganizationSetEntry[]> {\n return this.#backend.get(`/idm/search?search=${term}${size ? `&size=${size}` : ''}`).pipe(\n map((res) => [\n ...(targetTypes.includes('user')\n ? res.users.map((u: any) => ({\n id: u.id,\n title: `${u.lastname}, ${u.firstname} (${u.username})`, // TODO: u.title,\n type: 'user'\n }))\n : []),\n ...(targetTypes.includes('role')\n ? res.roles.map((u: any) => ({\n id: u.name,\n title: u.name,\n type: 'role'\n }))\n : [])\n ])\n );\n }\n}\n","export const YuvToastStyles = `\n.yuv-toast-container {\n --yuv-toast-container-padding: var(--ymt-spacing-m);\n --yuv-toast-success-background: var(--ymt-success-container);\n --yuv-toast-success-tone: var(--ymt-on-success-container);\n --yuv-toast-warning-background: var(--ymt-warning-container);\n --yuv-toast-warning-tone: var(--ymt-on-warning-container);\n --yuv-toast-error-background: var(--ymt-danger-container);\n --yuv-toast-error-tone: var(--ymt-on-danger-container);\n\n position: fixed;\n z-index: 9999;\n display: flex;\n flex-flow: column;\n align-items: center;\n justify-items: center;\n justify-content: center;\n gap: 1vh;\n pointer-events: none;\n }\n .yuv-toast-container.top {\n inset-block-start: 0;\n padding-block-start: var(--yuv-toast-container-padding);\n flex-direction: column-reverse;\n }\n .yuv-toast-container.top.center {\n inset-inline: 0;\n }\n .yuv-toast-container.bottom {\n inset-block-end: 0;\n padding-block-end: var(--yuv-toast-container-padding);\n }\n .yuv-toast-container.bottom.center {\n inset-inline: 0;\n }\n .yuv-toast-container.end {\n padding-inline-end: var(--yuv-toast-container-padding);\n align-items: end;\n right:0;\n}\n.yuv-toast-container.start {\n padding-inline-start: var(--yuv-toast-container-padding);\n align-items: start;\n left:0;\n }\n\n .yuv-toast {\n --_duration: 3s;\n --_bg-lightness: 90%;\n --_travel-distance: 0;\n\n font-family: system-ui, sans-serif;\n color: var(--ymt-on-surface);\n background: var(--ymt-surface-container);\n pointer-events: all;\n line-height: 1.5em;\n\n max-inline-size: min(50ch, 90vw);\n padding-block: .5ch;\n padding-inline: 1ch;\n border-radius: 3px;\n font-size: 1rem;\n\n will-change: transform;\n animation:\n fade-in .3s ease,\n slide-in .3s ease,\n fade-out .3s ease var(--_duration);\n\n \n\n @media (--motionOK) {\n --_travel-distance: 5vh;\n }\n }\n\n .yuv-toast strong {\n display: block;\n }\n\n .yuv-toast a {\n color: currentColor\n }\n\n .yuv-toast.success {\n background-color: var(--yuv-toast-success-background);\n color: var(--yuv-toast-success-tone);\n }\n .yuv-toast.warning {\n background-color: var(--yuv-toast-warning-background);\n color: var(--yuv-toast-warning-tone);\n }\n\n .yuv-toast.error {\n background-color: var(--yuv-toast-error-background);\n color: var(--yuv-toast-error-tone);\n }\n\n .yuv-toast:hover {\n animation-play-state: paused;\n }\n\n @keyframes fade-in {\n from { opacity: 0 }\n }\n\n @keyframes fade-out {\n to { opacity: 0 }\n }\n\n @keyframes slide-in {\n from { transform: translateY(var(--_travel-distance, 10px)) }\n }\n`;\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { ToastOptions } from './toast.interface';\nimport { YuvToastStyles } from './toast.styles';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ToastService {\n\n constructor(@Inject(DOCUMENT) private document: Document) {\n this._init();\n }\n\n success(\n message: string,\n title?: string,\n options?: ToastOptions\n ): Promise<void> {\n return this.toast(message, title, { ...options, level: 'success' });\n }\n\n warning(\n message: string,\n title?: string,\n options?: ToastOptions\n ): Promise<void> {\n return this.toast(message, title, { ...options, level: 'warning' });\n }\n\n info(message: string, title?: string, options?: ToastOptions): Promise<void> {\n return this.toast(message, title, { ...options, level: 'info' });\n }\n\n error(\n message: string,\n title?: string,\n options?: ToastOptions\n ): Promise<void> {\n return this.toast(message, title, { ...options, level: 'error' });\n }\n\n toast(\n message: string,\n title?: string,\n options?: ToastOptions\n ): Promise<void> {\n const toast = this._createToast(message, title, options);\n if (options?.duration !== undefined)\n toast.style.setProperty('--_duration', `${options.duration}s`);\n\n this._addToast(toast, options);\n\n return new Promise<void>(async (resolve, reject) => {\n await Promise.allSettled(\n toast.getAnimations().map((animation) => animation.finished)\n );\n const container = this._getToastContainer(options);\n container.removeChild(toast);\n if (container.children.length === 0) container.remove();\n resolve();\n });\n }\n\n private _createToast(\n message: string,\n title?: string,\n options?: ToastOptions\n ): HTMLOutputElement {\n const node = document.createElement('output');\n node.innerHTML = `${title ? `<strong>${title}</strong>` : ''}${message}`;\n node.classList.add('yuv-toast');\n if (options?.level) node.classList.add(options.level);\n node.setAttribute('role', 'status');\n node.setAttribute('aria-live', 'polite');\n return node;\n }\n\n private _addToast(toast: HTMLOutputElement, options?: ToastOptions) {\n const container = this._getToastContainer(options);\n container.appendChild(toast);\n }\n\n private _getToastContainer(options?: ToastOptions) {\n const pos = options?.position || 'bottom-center';\n let container = this.document.querySelector(\n `html > section.${pos.split('-').join('.')}`\n );\n if (!container) {\n container = this.document.createElement('section');\n container.classList.add('yuv-toast-container', ...pos.split('-'));\n this.document.firstElementChild!.insertBefore(\n container,\n this.document.body\n );\n }\n return container;\n }\n\n private _init(): void {\n const style = this.document.createElement('style');\n style.innerHTML = YuvToastStyles;\n this.document.head.appendChild(style);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { AuthService } from '../auth/auth.service';\nimport { EventService } from '../event/event.service';\nimport { YuvEventType } from '../event/events';\nimport { ToastOptions } from '../toast/toast.interface';\nimport { ToastService } from '../toast/toast.service';\n\n/**\n * Shows a message after completing each action.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationService {\n #toastService = inject(ToastService);\n #authService = inject(AuthService);\n #eventService = inject(EventService);\n\n /**\n * Set to true to suppress any notifications\n */\n silent = false;\n\n /**\n * Default Notofication Options\n *\n */\n private options: Partial<ToastOptions> = {\n position: 'bottom-end'\n };\n\n constructor() {\n this.#authService.authenticated$.subscribe((a) => (this.silent = !a));\n this.#eventService.on(YuvEventType.LOGOUT).subscribe(() => (this.silent = true));\n }\n\n /**\n * Show info colored massage (blue)\n *\n * @param string title\n * @param string msg\n */\n info(title: string, msg?: string) {\n this.toast(title, msg);\n }\n\n /**\n * Show success colored massage (green)\n * @param string title\n * @param string msg\n */\n success(title: string, msg?: string) {\n this.toast(title, msg, 'success');\n }\n\n /**\n * can not be in use\n *\n * @param string title\n * @param string msg\n */\n wait(title: string, msg?: string) {\n this.toast(title, msg, 'wait');\n }\n\n /**\n * Show error colored massage (red)\n *\n * @param string title\n * @param string msg\n */\n error(title: string, msg?: string) {\n this.toast(title, msg, 'error', {\n duration: 5\n });\n }\n\n /**\n * Show warning colored massage (yellow)\n *\n * @param string title\n * @param string msg\n */\n warning(title: string, msg?: string) {\n this.toast(title, msg, 'warning');\n }\n\n /**\n * Public wrapper for accessing the Toastr\n *\n * @param string title\n * @param string msg\n * @param string mode\n * @param _options\n */\n private toast(title: string, msg?: string, mode?: string, _options?: ToastOptions) {\n this.doToast(title, msg, { ...this.options, ..._options }, mode);\n }\n\n /**\n * Accessing the toastr service\n *\n * @param string msg\n * @param string title\n * @param options\n * @param string mode\n */\n private doToast(title: string, msg?: string, options?: ToastOptions, mode?: string) {\n if (this.silent) return;\n switch (mode) {\n case 'success': {\n this.#toastService.success(title, msg, options);\n break;\n }\n case 'error': {\n this.#toastService.error(title, msg, options);\n break;\n }\n case 'warning': {\n this.#toastService.warning(title, msg, options);\n break;\n }\n case 'confirm': {\n this.#toastService.info(title, msg, options);\n break;\n }\n default: {\n this.#toastService.info(title, msg, options);\n }\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { Utils } from '../../util/utils';\nimport { Logger } from '../logger/logger.service';\nimport { PendingChangesComponent } from './pending-changes-component.interface';\n\n/**\n * EditingObserver service is used to track changes made inside the application, that should prevent\n * doing something or going somewhere before the changes are persisted or ignored. For example when\n * the user starts editing form data and tries to navigate away before saving the changes, this service\n * will take care of notifying the user.\n *\n * It is working kind of like a registry for ongoing tasks that need to be monitored. Every component\n * that needs to be aware of changes to be persisted can start a task and finish it when everything is done.\n *\n * Other components can ask the service for pending tasks to know whether or not to execute an action\n * (e.g. list component will subscribe and prevent selecting another list item, if changes to the previous one haven't be finished)\n *\n * app.component will prevent relevant route changes while tasks are pending.\n */\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PendingChangesService {\n #logger = inject(Logger);\n\n #tasks: { id: string; message?: string }[] = [];\n #tasksSource = new ReplaySubject<{ id: string; message?: string }[]>();\n tasks$: Observable<{ id: string; message?: string }[]> = this.#tasksSource.asObservable();\n\n // private customMsg = '';\n #defaultMsg = 'You are currently editing the index data of a form that has not been saved. Unsaved data will be lost.';\n\n /**\n * Registers a task to be pending.\n * @param message alert message\n * @returns Unique id to be used for finishing this task\n */\n startTask(message: string): string {\n const taskId = Utils.uuid();\n this.#tasks.push({ id: taskId, message: message });\n this.#logger.debug('started pending task: ' + taskId);\n this.#tasksSource.next(this.#tasks);\n return taskId;\n }\n\n /**\n * Finishes a task\n * @param id The id of the task to be finished. This is the one the component got from startTask()\n */\n finishTask(id: string) {\n if (id) {\n this.#tasks = this.#tasks.filter((t) => t.id !== id);\n this.#tasksSource.next(this.#tasks);\n this.#logger.debug('finished pending task: ' + id);\n }\n }\n\n /**\n * Returns whether or not the service has pending tasks.\n * If an id is provided, the method will check existence of one specific task.\n *\n * @param id The id of the task to be checked\n * @returns\n */\n hasPendingTask(id?: string | string[]): boolean {\n return !id ? !!this.#tasks.length : Array.isArray(id) ? this.#tasks.some((value) => id.includes(value.id)) : this.#tasks.map((t) => t.id).includes(id);\n }\n\n /**\n * Returns whether or not the component|service has pending tasks.\n * Checks via confirm dialog\n * @param component\n * @returns\n */\n check(component?: PendingChangesComponent): boolean {\n if (component && component.hasPendingChanges ? !component.hasPendingChanges() : !this.hasPendingTask()) {\n return false;\n } else {\n const confirmed = confirm(this.#getConfirmMessage());\n if (confirmed) {\n this.clear();\n }\n return !confirmed;\n }\n }\n\n checkForPendingTasks(taskIds: string | string[]): boolean {\n if (this.hasPendingTask(taskIds)) {\n const confirmed = confirm(this.#getConfirmMessage());\n if (confirmed) {\n this.clear();\n }\n return !confirmed;\n } else {\n return false;\n }\n }\n\n #getConfirmMessage(): string {\n let msg = '';\n this.#tasks.forEach((t) => {\n // do not apply messages twice\n if (msg.indexOf(t.message || this.#defaultMsg) === -1) {\n msg = `${msg}${msg.length > 0 ? '\\n---\\n' : ''}${t.message || this.#defaultMsg}`;\n }\n });\n return msg;\n }\n\n /**\n * Clear list of pending tasks\n */\n clear() {\n this.#tasks = [];\n this.#tasksSource.next(this.#tasks);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\nimport { PendingChangesComponent } from './pending-changes-component.interface';\nimport { PendingChangesService } from './pending-changes.service';\n/**\n * Providing a `PendingChangesComponent`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PendingChangesGuard implements CanDeactivate<PendingChangesComponent> {\n constructor(private pendingChanges: PendingChangesService) {}\n\n canDeactivate(component: PendingChangesComponent): boolean {\n // if there are no pending changes, just allow deactivation; else confirm first\n return !this.pendingChanges.check(component);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { filter, isObservable, map, merge, Observable, of, switchMap } from 'rxjs';\nimport { PendingChangesService } from './pending-changes.service';\n\n/**\n * Service that provides guards for Material Dialog close operations.\n *\n * This service allows you to intercept and control dialog close events,\n * enabling confirmation dialogs or preventing accidental closure when\n * there are unsaved changes or pending operations.\n *\n * @example\n * ```typescript\n * readonly #dialogCloseGuard = inject(DialogCloseGuard);\n *\n * openDialog() {\n * const dialogRef = this.dialog.open(MyComponent);\n *\n * // Prevent dialog from closing if there are unsaved changes\n * this.#dialogCloseGuard.dialogCanClose(dialogRef, () => {\n * return this.hasUnsavedChanges() ? this.confirmClose() : true;\n * }).subscribe();\n * }\n * ```\n */\n@Injectable()\nexport class DialogCloseGuard {\n readonly #pendingChangesService = inject(PendingChangesService);\n /**\n * Converts a synchronous or asynchronous check function result to an Observable.\n *\n * This private method normalizes the return value of check functions,\n * ensuring they are always handled as Observables for consistent processing.\n *\n * @private\n * @param checkFunction - Function that returns either a boolean or Observable<boolean>\n * @returns Observable<boolean> - Always returns an Observable, regardless of input type\n */\n #canClose(checkFunction: () => boolean | Observable<boolean>): Observable<boolean> {\n const result = checkFunction();\n return isObservable(result) ? result : of(result);\n }\n\n /**\n * Guards against dialog closure when the backdrop is clicked.\n *\n * This method disables the default close behavior and only allows the dialog\n * to close when the provided check function returns true. The check is triggered\n * specifically when the user clicks on the dialog backdrop.\n *\n * @param dialogRef - Reference to the Material Dialog instance\n * @param checkFunction - Function that determines if the dialog can be closed.\n * Can return a boolean directly or an Observable<boolean>\n * @returns Observable<boolean> - Emits true when the dialog can be closed via backdrop click\n *\n * @example\n * ```typescript\n * this.dialogCloseGuard.checkBackdropCanClose(dialogRef, () => {\n * return this.formIsDirty ? this.showConfirmDialog() : true;\n * }).subscribe(canClose => {\n * if (canClose) {\n * dialogRef.close();\n * }\n * });\n * ```\n */\n checkBackdropCanClose(dialogRef: MatDialogRef<any>, checkFunction: () => boolean | Observable<boolean>): Observable<boolean> {\n dialogRef.disableClose = true;\n return dialogRef.backdropClick().pipe(switchMap(() => this.#canClose(checkFunction)));\n }\n\n /**\n * Guards against dialog closure when the Escape key is pressed.\n *\n * This method disables the default close behavior and only allows the dialog\n * to close when the provided check function returns true. The check is triggered\n * specifically when the user presses the Escape key.\n *\n * @param dialogRef - Reference to the Material Dialog instance\n * @param checkFunction - Function that determines if the dialog can be closed.\n * Can return a boolean directly or an Observable<boolean>\n * @returns Observable<boolean> - Emits true when the dialog can be closed via Escape key\n *\n * @example\n * ```typescript\n * this.dialogCloseGuard.checkKeydownEventsCanClose(dialogRef, () => {\n * return this.hasUnsavedChanges ? this.confirmDiscardChanges() : true;\n * }).subscribe(canClose => {\n * if (canClose) {\n * dialogRef.close();\n * }\n * });\n * ```\n */\n checkKeydownEventsCanClose(dialogRef: MatDialogRef<any>, checkFunction: () => boolean | Observable<boolean>): Observable<boolean> {\n dialogRef.disableClose = true;\n return dialogRef.keydownEvents().pipe(\n filter((event) => event.key === 'Escape'),\n switchMap(() => this.#canClose(checkFunction))\n );\n }\n\n /**\n * Comprehensive dialog close guard that handles both backdrop clicks and Escape key presses.\n *\n * This method provides a unified approach to guard dialog closure by monitoring both\n * backdrop clicks and Escape key events. When either event occurs, it runs the provided\n * check function and automatically closes the dialog if the check passes.\n *\n * This is the most convenient method when you want to guard against all common\n * dialog close scenarios with a single setup.\n *\n * @template T - The type of data that the dialog returns\n * @param dialogRef - Reference to the Material Dialog instance\n * @param checkFunction - Function that determines if the dialog can be closed.\n * Can return a boolean directly or an Observable<boolean>\n * @returns Observable<false | void> - Emits false if the dialog cannot be closed,\n * or void when the dialog is successfully closed\n *\n * @example\n * ```typescript\n * // Simple boolean check\n * this.dialogCloseGuard.dialogCanClose(dialogRef, () => !this.hasUnsavedChanges).subscribe();\n *\n * // Async check with confirmation dialog\n * this.dialogCloseGuard.dialogCanClose(dialogRef, () => {\n * return this.hasUnsavedChanges\n * ? this.confirmationService.confirm('Discard changes?')\n * : of(true);\n * }).subscribe();\n * ```\n */\n preventCloseUntil<T>(dialogRef: MatDialogRef<T>, checkFunction: () => boolean | Observable<boolean>): Observable<false | void> {\n dialogRef.disableClose = true;\n return merge(dialogRef.backdropClick(), dialogRef.keydownEvents().pipe(filter((event) => event.key === 'Escape'))).pipe(\n switchMap(() => this.#canClose(checkFunction)),\n map((canClose) => canClose && dialogRef.close())\n );\n }\n\n /**\n * Specialized dialog close guard that automatically checks for pending changes.\n *\n * This convenience method provides automatic pending changes detection without\n * requiring a custom check function. It integrates with the PendingChangesService\n * to determine if there are any unsaved changes, and handles both backdrop clicks\n * and Escape key presses automatically.\n *\n * This method is ideal when you want to prevent dialog closure if there are\n * pending changes anywhere in the application, without having to implement\n * custom change detection logic.\n *\n * @template T - The type of data that the dialog returns\n * @param dialogRef - Reference to the Material Dialog instance\n * @returns Observable<false | void> - Emits false if there are pending changes\n * preventing closure, or void when the dialog\n * is successfully closed\n *\n */\n pendingChangesDialogCanClose<T>(dialogRef: MatDialogRef<T>): Observable<false | void> {\n dialogRef.disableClose = true;\n return merge(dialogRef.backdropClick(), dialogRef.keydownEvents().pipe(filter((event) => event.key === 'Escape'))).pipe(\n switchMap(() => of(this.#pendingChangesService.check())),\n map((canClose) => !canClose && dialogRef.close())\n );\n }\n}\n","import { Directive, DoCheck, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { PendingChangesService } from './pending-changes.service';\nimport { MatTabGroup } from '@angular/material/tabs';\n\n@Directive({\n selector: 'mat-tab-group[yuvTabGuardDisable]'\n})\nexport class TabGuardDirective implements DoCheck {\n readonly #tabGroup = inject(MatTabGroup);\n readonly #pending = inject(PendingChangesService);\n\n constructor() {\n this.#tabGroup.selectedIndexChange.pipe(takeUntilDestroyed()).subscribe(() => this.#updateTabs());\n }\n\n ngDoCheck() {\n this.#updateTabs();\n }\n\n #updateTabs() {\n const activeIndex = this.#tabGroup.selectedIndex ?? 0;\n const hasPending = this.#pending.hasPendingTask();\n\n this.#tabGroup._tabs.forEach((tab, i) => ((tab as any).disabled = hasPending && i !== activeIndex));\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BackendService } from '../backend/backend.service';\nimport { BaseObjectTypeField } from '../system/system.enum';\nimport { ApiBase } from './../backend/api.enum';\nimport { PredictionClassifyResult, PredictionExtractResult } from './prediction.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PredictionService {\n #backend = inject(BackendService);\n\n classify(objectIDs: string[], schemaObjectTypeId = 'CLASSIFICATION'): Observable<Record<string, PredictionClassifyResult>> {\n const objects = objectIDs.map((objectID) => ({\n properties: {\n [BaseObjectTypeField.OBJECT_ID]: {\n value: objectID\n }\n }\n }));\n\n return this.#backend.post(`/classification?schemaObjectTypeId=${schemaObjectTypeId}`, { objects }, ApiBase.predict).pipe(\n map((res: any) =>\n res.predictions.reduce(\n (acc: any, curr: any) => ({\n ...acc,\n [curr[BaseObjectTypeField.OBJECT_ID].value]: {\n objectId: curr[BaseObjectTypeField.OBJECT_ID].value,\n properties: Object.keys(curr.properties).map((type: any) => ({\n type,\n probability: curr.properties[type].probability\n }))\n }\n }),\n {}\n )\n )\n );\n }\n\n /**\n * @param schemaObjectTypeId\n * @param objectIDs\n * @returns Observable<Record<string, PredictionClassifyResult>> string is objectID\n */\n extract(schemaObjectTypeId: string, objectIDs: string[]): Observable<Record<string, PredictionExtractResult>> {\n const searchParams = new URLSearchParams();\n searchParams.append('schemaObjectTypeId', schemaObjectTypeId);\n const objects = objectIDs.map((objectID) => ({\n properties: {\n [BaseObjectTypeField.OBJECT_ID]: {\n value: objectID\n }\n }\n }));\n\n return this.#backend.post(`/extraction?${searchParams.toString()}`, { objects }, ApiBase.predict).pipe(\n map((res) =>\n res.predictions.reduce(\n (acc: any, curr: any) => ({\n ...acc,\n [curr[BaseObjectTypeField.OBJECT_ID].value]: {\n objectId: curr[BaseObjectTypeField.OBJECT_ID].value,\n properties: curr.properties\n }\n }),\n {}\n )\n )\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DmsObject } from '../../model/dms-object.model';\nimport { BaseObjectTypeField, RetentionField, SystemSOT } from '../system/system.enum';\nimport { DmsService } from '../dms/dms.service';\nimport { RetentionState } from './retention.interface';\nimport { Observable, of } from 'rxjs';\n\n/**\n * Service to manage retention for DMS objects. This service allows to set retention\n * for objects and revert retention if necessary/possible.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RetentionService {\n #dms = inject(DmsService);\n\n /**\n * Set retention for given objects. This will add the retention SOT to the objects\n * and set the retention start and end date. If the retetion start date is in the\n * future, you can revert the retention until then by calling `revertRetention`.\n * @param dmsObjects The objects to set retention for\n * @param retentionStart Date when retention period should begin\n * @param retentionEnd Date when retention period should end\n * @param destructionDate Date when the object should be destroyed. This right now is just a\n * marker and has no effect on the object lifecycle.\n * @returns The updated objects\n */\n setRetention(dmsObjects: DmsObject[], retentionStart: Date, retentionEnd: Date, destructionDate?: Date): Observable<DmsObject[]> {\n const payload: { id: string; data: { [key: string]: any } }[] = [];\n dmsObjects.forEach((o) => {\n const data: Record<string, unknown> = {\n [BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS]: [\n ...(o.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[]),\n SystemSOT.DESTRUCTION_RETENTION\n ],\n [RetentionField.RETENTION_START]: retentionStart\n };\n if (retentionEnd) data[RetentionField.RETENTION_END] = retentionEnd;\n if (destructionDate) data[RetentionField.DESTRUCTION_DATE] = destructionDate;\n payload.push({ id: o.id, data });\n });\n\n return this.#dms.updateDmsObjects(payload);\n }\n\n getRetentionState(dmsObject: DmsObject): RetentionState {\n const objectSOTs = dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS];\n const hasRetentionSOT = objectSOTs && (objectSOTs as string[]).includes(SystemSOT.DESTRUCTION_RETENTION);\n if (hasRetentionSOT) {\n const now = new Date();\n const retentionStart = new Date(dmsObject.data[RetentionField.RETENTION_START] as string);\n const retentionEnd = dmsObject.data[RetentionField.RETENTION_END] ? new Date(dmsObject.data[RetentionField.RETENTION_END] as string) : null;\n const underRetention = !!(retentionStart < now || (retentionEnd && retentionEnd > now));\n return {\n underRetention,\n start: new Date(retentionStart),\n end: retentionEnd ? new Date(retentionEnd) : undefined\n };\n } else return { underRetention: false };\n }\n}\n","import { RangeValue } from '../../model/range-value.interface';\nimport { Utils } from '../../util/utils';\nimport { DateRange, FilesizeRange, Operator } from './search.service.interface';\n\nexport class SearchUtils {\n static dateRanges = ['today', 'yesterday', 'thisWeek', 'lastWeek', 'thisMonth', 'lastMonth', 'thisYear', 'lastYear'];\n static filesizeRanges = ['small', 'medium', 'large', 'verylarge'];\n\n static dateRangeStartEnd(dateRange: DateRange): { start: Date; end: Date } {\n let start: Date;\n let end: Date;\n\n switch (dateRange) {\n case 'today': {\n start = new Date();\n end = new Date();\n break;\n }\n case 'yesterday': {\n const yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n\n start = yesterday;\n end = yesterday;\n break;\n }\n case 'thisWeek': {\n const firstDay = new Date();\n firstDay.setDate(firstDay.getDate() - firstDay.getDay());\n\n start = firstDay;\n end = new Date();\n break;\n }\n case 'lastWeek': {\n const firstDay = new Date();\n firstDay.setDate(firstDay.getDate() - firstDay.getDay() - 7);\n const lastDay = new Date();\n lastDay.setDate(lastDay.getDate() - lastDay.getDay() - 1);\n\n start = firstDay;\n end = lastDay;\n break;\n }\n case 'thisMonth': {\n const firstDay = new Date();\n firstDay.setDate(1);\n\n start = firstDay;\n end = new Date();\n break;\n }\n case 'lastMonth': {\n const firstDay = new Date();\n firstDay.setDate(1);\n firstDay.setMonth(firstDay.getMonth() - 1);\n const lastDay = new Date();\n lastDay.setDate(0);\n\n start = firstDay;\n end = lastDay;\n break;\n }\n case 'thisYear': {\n const firstDay = new Date();\n firstDay.setMonth(0);\n firstDay.setDate(1);\n\n start = firstDay;\n end = new Date();\n break;\n }\n case 'lastYear': {\n const firstDay = new Date();\n firstDay.setFullYear(firstDay.getFullYear() - 1);\n firstDay.setMonth(0);\n firstDay.setDate(1);\n const lastDay = new Date();\n lastDay.setFullYear(lastDay.getFullYear() - 1);\n lastDay.setMonth(11);\n lastDay.setDate(31);\n\n start = firstDay;\n end = lastDay;\n break;\n }\n }\n const startString = start?.toISOString().split('T')[0] + Utils.DEFAULT_RANGE_TIME_V1;\n start = new Date(startString);\n const endString = end?.toISOString().split('T')[0] + Utils.DEFAULT_RANGE_TIME_V2;\n end = new Date(endString);\n return { start, end };\n }\n\n /**\n * Maps a date range filter to a date range value like 'thisWeek', 'lastMonth', etc.\n * @param rangeValue the range value\n * @returns the date range (eg. 'thisWeek', 'lastMonth', etc.)\n */\n static getMatchingDateRange(rangeValue: RangeValue): DateRange | undefined {\n return SearchUtils.dateRanges.find((dateRange) => {\n const { start, end } = SearchUtils.dateRangeStartEnd(dateRange as DateRange);\n return (\n rangeValue.firstValue === start.toISOString().split('T')[0] + Utils.DEFAULT_RANGE_TIME_V1 &&\n rangeValue.secondValue === end.toISOString().split('T')[0] + Utils.DEFAULT_RANGE_TIME_V2\n );\n }) as DateRange;\n }\n\n // Files size ranges\n static getMatchingFilesizeRange(rangeValue: RangeValue): FilesizeRange | undefined {\n let filesizeRange: FilesizeRange | undefined = undefined;\n if (rangeValue.operator === Operator.INTERVAL_INCLUDE_BOTH) {\n if (rangeValue.firstValue === 1024 * 1024 && rangeValue.secondValue === 1024 * 1024 * 10) filesizeRange = 'medium';\n else if (rangeValue.firstValue === 1024 * 1024 * 10 && rangeValue.secondValue === 1024 * 1024 * 100) filesizeRange = 'large';\n } else if (rangeValue.operator === Operator.LESS_THAN) {\n if (rangeValue.firstValue === 1024 * 1024) filesizeRange = 'small';\n } else if (rangeValue.operator === Operator.GREATER_THAN) {\n if (rangeValue.firstValue === 1024 * 1024 * 100) filesizeRange = 'verylarge';\n }\n return filesizeRange;\n }\n\n static filesizeRangeToRangeValue(filesizeRange: FilesizeRange): RangeValue | undefined {\n let rv: RangeValue | undefined = undefined;\n switch (filesizeRange) {\n case 'small':\n rv = {\n operator: Operator.LESS_THAN,\n firstValue: 1024 * 1024\n };\n break;\n case 'medium':\n rv = {\n operator: Operator.INTERVAL_INCLUDE_BOTH,\n firstValue: 1024 * 1024,\n secondValue: 1024 * 1024 * 10\n };\n break;\n case 'large':\n rv = {\n operator: Operator.INTERVAL_INCLUDE_BOTH,\n firstValue: 1024 * 1024 * 10,\n secondValue: 1024 * 1024 * 100\n };\n break;\n case 'verylarge':\n rv = {\n operator: Operator.GREATER_THAN,\n firstValue: 1024 * 1024 * 100\n };\n break;\n }\n return rv;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SessionStorageService {\n #TEMP_STORAGE_ENTRIES_KEY = 'yuv.core.sessionstorage.entries';\n\n constructor() {\n this.#clearTemporaryStorageEntries();\n }\n\n /**\n * Add a reference to a temporary localstorage entry that should be cleared when a\n * new browser session starts. In context of forms this will be used to cleanup the\n * layout state of forms (selected tabs etc.) that are stored locally but should only\n * be pesisted for one browser session.\n * @param storageKey Key of the localstorage item\n */\n addTemporaryStorageEntry(storageKey: string) {\n // entries will themselves be stored in localstorage so we can check for entries\n // to be removed once the application starts\n const current = this.#getTemporaryStorageEntries();\n if (!current.includes(storageKey)) localStorage.setItem(this.#TEMP_STORAGE_ENTRIES_KEY, JSON.stringify([...current, storageKey]));\n }\n\n #clearTemporaryStorageEntries() {\n this.#getTemporaryStorageEntries().forEach((e) => localStorage.removeItem(e));\n localStorage.removeItem(this.#TEMP_STORAGE_ENTRIES_KEY);\n }\n\n #getTemporaryStorageEntries(): string[] {\n let res: string[] = [];\n const i = localStorage.getItem(this.#TEMP_STORAGE_ENTRIES_KEY);\n if (i) {\n try {\n const entries: string[] = JSON.parse(i);\n if (Array.isArray(entries)) res = entries;\n } catch (e) {\n console.error(e);\n }\n }\n return res;\n }\n}\n","import { FormControl, FormGroup } from '@angular/forms';\n\nexport type ObjectFormModel = ObjectFormGroup | ObjectFormControlWrapper;\n\nexport class ObjectFormControlWrapper extends FormGroup {\n _eoFormControlWrapper?: YuvFormGroupWrapper;\n}\n\nexport interface YuvFormGroupWrapper {\n /**\n * form control situation (CREATE, EDIT, SEARCH)\n */\n //\n situation: string;\n /**\n * the name of the wrapped form control\n */\n controlName: string;\n}\n\nexport interface YuvFormGroup {\n /**\n * the label for the form group\n */\n label?: string;\n /**\n * object holding properties defining layout properties of the group\n */\n //\n layout: any;\n /**\n * type of group indicating if the form is a stack, a fieldset or a simple group\n */\n type: string;\n}\n\n/**\n * @ignore\n * Extension of the default angular form group,\n */\nexport class ObjectFormGroup extends FormGroup {\n public _eoFormGroup?: YuvFormGroup;\n}\n/**\n * @ignore\n * Extension of the default angular form control,\n */\nexport class ObjectFormControl extends FormControl {\n private __eoFormElement: any;\n\n public set _eoFormElement(v) {\n this.__eoFormElement = v;\n }\n\n public get _eoFormElement() {\n return this.__eoFormElement;\n }\n}\n\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, switchMap } from 'rxjs';\nimport { BackendService } from '../backend/backend.service';\n\n/**\n * Service providing user related remote storage. This service is used load and\n * store user related data from any device.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class UserStorageService {\n #backend = inject(BackendService);\n\n #USERS_SETTINGS = '/users/settings';\n // prefix to be added to every section key to be able to later distinguish\n // between user settings and other settings\n #SECTION_PREFIX = 'x-user-';\n\n /**\n *\n * @param section section key for\n * @param value value to be stored\n */\n getItem(section: string): Observable<Record<string, any> | undefined> {\n return this.#backend.get(`${this.#USERS_SETTINGS}/${this.#sanitizeSection(this.#SECTION_PREFIX + section)}`);\n }\n\n setItem(section: string, data: Record<string, any>): Observable<any> {\n return this.getItem(section).pipe(\n switchMap((current) => this.#backend.post(`${this.#USERS_SETTINGS}/${this.#sanitizeSection(this.#SECTION_PREFIX + section)}`, { ...current, ...data }))\n );\n }\n\n #sanitizeSection(section: string) {\n return encodeURIComponent(section);\n }\n}\n","import { CurrencyPipe, DecimalPipe, PercentPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * @ignore\n */\n@Pipe({\n name: 'localeDecimal',\n standalone: true\n})\nexport class LocaleDecimalPipe extends DecimalPipe implements PipeTransform {\n constructor(public translate: TranslateService) {\n super(translate.currentLang || 'en');\n }\n\n public override transform(value: any, digits?: string, locale?: string): string | null | any {\n return super.transform(value, digits, locale || this.translate.currentLang || 'en');\n }\n}\n\n/**\n * @ignore\n */\n@Pipe({\n name: 'localePercent',\n pure: false,\n standalone: true\n})\nexport class LocalePercentPipe extends PercentPipe implements PipeTransform {\n constructor(public translate: TranslateService) {\n super(translate.currentLang || 'en');\n }\n\n public override transform(value: any, digits?: string, locale?: string): string | null | any {\n return super.transform(value, digits, locale || this.translate.currentLang || 'en');\n }\n}\n\n/**\n * @ignore\n */\n@Pipe({\n name: 'localeCurrency',\n standalone: true\n})\nexport class LocaleCurrencyPipe extends CurrencyPipe implements PipeTransform {\n constructor(public translate: TranslateService) {\n super(translate.currentLang || 'en');\n }\n\n public override transform(\n value: any,\n currencyCode?: string,\n display?: 'code' | 'symbol' | 'symbol-narrow' | boolean,\n digits?: string,\n locale?: string\n ): string | null | any {\n return super.transform(value, currencyCode, display, digits, locale || this.translate.currentLang || 'en');\n }\n}\n\n@Pipe({\n name: 'localeNumber',\n standalone: true\n})\nexport class LocaleNumberPipe implements PipeTransform {\n decimalPipe;\n decimalSeparator = '.';\n separator = ',';\n\n constructor(public translate: TranslateService) {\n this.decimalPipe = new LocaleDecimalPipe(this.translate);\n this.updateSeparators(this.translate.currentLang);\n }\n\n public transform(value: any, grouping?: boolean, pattern?: string, scale?: number, digits?: string, locale?: string): string | null {\n value = Array.isArray(value) ? value[0] : value;\n let number = this.decimalPipe.transform(value, digits, locale);\n if (number && !grouping) {\n number = number.replace(new RegExp('\\\\' + this.separator, 'g'), '');\n }\n return number ? (pattern || '{{number}}').replace('{{number}}', number) : number;\n }\n\n private updateSeparators(lang: string) {\n if (lang) {\n const pattern = this.decimalPipe.transform(1111.11, '1.2-2', lang);\n this.decimalSeparator = pattern[5];\n this.separator = pattern[1];\n }\n }\n\n stringToNumber(value: string) {\n value = (value || '').replace(new RegExp('\\\\' + this.separator + \"|\\\\s|'| \", 'g'), '').replace(this.decimalSeparator, '.');\n if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {\n return Number(value);\n }\n return NaN;\n }\n\n numberToString(value: number, grouping?: boolean, pattern?: string, scale?: number) {\n value = Array.isArray(value) ? value[0] : value;\n scale = typeof scale === 'number' ? scale : 2;\n return this.transform(value, grouping, pattern as string, scale, `1.${scale}-${scale}`);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocaleNumberPipe } from './locale-number.pipe';\n\n/**\n * This pipe transforms its input (supposed to be a file size in bytes) into a more\n * human readable format like for example 1MB or 200KB.\n *\n * @example\n * <div *ngFor=\"let size of file | fileSize\">...</div>\n */\n@Pipe({ name: 'fileSize', standalone: true })\nexport class FileSizePipe extends LocaleNumberPipe implements PipeTransform {\n private k = 1024;\n private sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n override transform(bytes = 0): string {\n if (bytes <= 1) {\n return bytes === 1 ? '1 Byte' : '0 Bytes';\n }\n let i: number = Math.floor(Math.log(bytes) / Math.log(this.k));\n return super.transform(parseFloat((bytes / Math.pow(this.k, i)).toFixed(2))) + ' ' + this.sizes[i];\n }\n\n override stringToNumber(value: string) {\n const sizes = this.sizes.map((s) => s.toLowerCase());\n const match = value.toLowerCase().match(new RegExp(`(.*)(${sizes.join('|')})`));\n const number = super.stringToNumber((match ? match[1] : value).trim());\n return isNaN(number) ? number : Math.round(number * Math.pow(1024, match ? sizes.indexOf(match[2]) : 0));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\ntype Formats = 'short' | 'medium' | 'shortDate';\n\nconst predefinedFormats: Record<Formats, Intl.DateTimeFormatOptions> = {\n short: {\n timeStyle: 'short',\n dateStyle: 'short'\n },\n medium: {\n timeStyle: 'medium',\n dateStyle: 'medium'\n },\n shortDate: {\n dateStyle: 'short'\n }\n};\n\n@Pipe({\n name: 'localeDate',\n standalone: true\n})\nexport class LocaleDatePipe implements PipeTransform {\n constructor(public translate: TranslateService) {}\n\n transform(value: string | number | Date | undefined, format: Formats = 'short') {\n if (!value) return '';\n else {\n try {\n return new Intl.DateTimeFormat(this.translate.currentLang, predefinedFormats[format] as Intl.DateTimeFormatOptions).format(\n !(value instanceof Date) ? new Date(value) : value\n );\n } catch (e) {\n console.error(e);\n return '';\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml, SafeResourceUrl } from '@angular/platform-browser';\n\n/**\n * This pipe bypass security and trust the given value to be safe HTML.\n * Only use this when the bound HTML is unsafe (e.g. contains script tags and the code should be executed.).\n * @example\n * <div [innerHtml]=\"value | safeHtml\"></div>\n */\n@Pipe({ name: 'safeHtml', standalone: true })\nexport class SafeHtmlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) { }\n\n transform(style: any): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(style);\n }\n}\n/**\n * This pipe bypass security and trust the given value to be a safe style URL, i.e. a value that can be used in hyperlinks or img src.\n * @example\n * <iframe [src]=\"previewSrc | safeUrl\"></iframe>\n */\n@Pipe({ name: 'safeUrl', standalone: true })\nexport class SafeUrlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) { }\n\n public transform(url: any): SafeResourceUrl {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n/**\n * @ignore\n */\n@Pipe({ name: 'keys', pure: false, standalone: true })\nexport class KeysPipe implements PipeTransform {\n transform(value: any): any {\n return Object.keys(value);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NativeNotificationOptions } from './native-notifications.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NativeNotificationService {\n requestPermission(): void {\n if ('Notification' in window) {\n Notification.requestPermission().then((permission) => {\n if (permission === 'granted') {\n console.log('Notification permission granted.');\n } else {\n console.log('Notification permission denied.');\n }\n });\n } else {\n console.log('Notifications are not supported in this browser.');\n }\n }\n\n showNotification(title: string, options?: NativeNotificationOptions): void {\n const preventBecauseTabActive = options?.preventOnTabActive && document.visibilityState === 'visible';\n if ('Notification' in window && Notification.permission === 'granted' && !preventBecauseTabActive) {\n const n = new Notification(title, options?.options);\n n.onclick = (e) => { \n window.focus();\n if(options?.onClick) options.onClick();\n n.close();\n };\n }\n }\n}\n","import { HttpErrorResponse, HttpEvent, HttpHandlerFn, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { UserService } from '../user/user.service';\nimport { AuthService } from './auth.service';\n/**\n * Prevent app from running into 401 issues related to gateway timeouts.\n */\n\nexport function AuthInterceptorFnc(req: HttpRequest<unknown>, next: HttpHandlerFn): Observable<HttpEvent<unknown>> {\n const userService = inject(UserService);\n const auth = inject(AuthService);\n\n return next(req).pipe(\n tap({\n next: (event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n // do stuff with response if you want\n }\n },\n error: (error: any) => {\n if (error instanceof HttpErrorResponse || error.isHttpErrorResponse) {\n if (error.status === 401) {\n auth.logout();\n userService.logout();\n }\n }\n }\n })\n );\n}\n","import { HttpEvent, HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n/**\n * Http Offline interceptor trys to serving offline content for method/url\n */\n\nexport function OfflineInterceptorFnc(req: HttpRequest<unknown>, next: HttpHandlerFn): Observable<HttpEvent<unknown>> {\n return next(req);\n}\n","import { MissingTranslationHandler, MissingTranslationHandlerParams } from '@ngx-translate/core';\n\n/**\n * Handles missing translations\n * @ignore\n */\nexport class EoxMissingTranslationHandler implements MissingTranslationHandler {\n handle(params: MissingTranslationHandlerParams) {\n return '!missing key: ' + params.key;\n }\n}","/**\n * i18n packages\n */\nimport { registerLocaleData } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport localeAr from '@angular/common/locales/ar';\nimport localeBn from '@angular/common/locales/bn';\nimport localeDe from '@angular/common/locales/de';\nimport localeDeCh from '@angular/common/locales/de-CH';\nimport localeEs from '@angular/common/locales/es';\nimport localeExtraAr from '@angular/common/locales/extra/ar';\nimport localeExtraBn from '@angular/common/locales/extra/bn';\nimport localeExtraDe from '@angular/common/locales/extra/de';\nimport localeExtraDeCh from '@angular/common/locales/extra/de-CH';\nimport localeExtraEs from '@angular/common/locales/extra/es';\nimport localeExtraFi from '@angular/common/locales/extra/fi';\nimport localeExtraFr from '@angular/common/locales/extra/fr';\nimport localeExtraHi from '@angular/common/locales/extra/hi';\nimport localeExtraIt from '@angular/common/locales/extra/it';\nimport localeExtraJa from '@angular/common/locales/extra/ja';\nimport localeExtraKo from '@angular/common/locales/extra/ko';\nimport localeExtraLv from '@angular/common/locales/extra/lv';\nimport localeExtraNb from '@angular/common/locales/extra/nb';\nimport localeExtraNl from '@angular/common/locales/extra/nl';\nimport localeExtraPl from '@angular/common/locales/extra/pl';\nimport localeExtraPt from '@angular/common/locales/extra/pt';\nimport localeExtraRu from '@angular/common/locales/extra/ru';\nimport localeExtraSk from '@angular/common/locales/extra/sk';\nimport localeExtraSv from '@angular/common/locales/extra/sv';\nimport localeExtraTh from '@angular/common/locales/extra/th';\nimport localeExtraTr from '@angular/common/locales/extra/tr';\nimport localeExtraUk from '@angular/common/locales/extra/uk';\nimport localeExtraVi from '@angular/common/locales/extra/vi';\nimport localeExtraZh from '@angular/common/locales/extra/zh';\nimport localeFi from '@angular/common/locales/fi';\nimport localeFr from '@angular/common/locales/fr';\nimport localeHi from '@angular/common/locales/hi';\nimport localeIt from '@angular/common/locales/it';\nimport localeJa from '@angular/common/locales/ja';\nimport localeKo from '@angular/common/locales/ko';\nimport localeLv from '@angular/common/locales/lv';\nimport localeNb from '@angular/common/locales/nb';\nimport localeNl from '@angular/common/locales/nl';\nimport localePl from '@angular/common/locales/pl';\nimport localePt from '@angular/common/locales/pt';\nimport localeRu from '@angular/common/locales/ru';\nimport localeSk from '@angular/common/locales/sk';\nimport localeSv from '@angular/common/locales/sv';\nimport localeTh from '@angular/common/locales/th';\nimport localeTr from '@angular/common/locales/tr';\nimport localeUk from '@angular/common/locales/uk';\nimport localeVi from '@angular/common/locales/vi';\nimport localeZh from '@angular/common/locales/zh';\nimport { Inject } from '@angular/core';\nimport { TranslateLoader } from '@ngx-translate/core';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { Utils } from '../../util/utils';\nimport { CoreConfig } from '../config/core-config';\nimport { CORE_CONFIG } from '../config/core-config.tokens';\n\n/**\n * Loader that fetches translations based on the configured locations\n * @ignore\n */\nexport class EoxTranslateJsonLoader implements TranslateLoader {\n constructor(\n public http: HttpClient,\n @Inject(CORE_CONFIG) public config: CoreConfig\n ) {\n registerLocaleData(localeDe, 'de', localeExtraDe); // German\n registerLocaleData(localeAr, 'ar', localeExtraAr); // Arabic\n registerLocaleData(localeEs, 'es', localeExtraEs); // Spanish\n registerLocaleData(localePt, 'pt', localeExtraPt); // Portuguese\n registerLocaleData(localeFr, 'fr', localeExtraFr); // French\n registerLocaleData(localeZh, 'zh', localeExtraZh); // Chinese\n registerLocaleData(localeLv, 'lv', localeExtraLv); // Latvian\n registerLocaleData(localeRu, 'ru', localeExtraRu); // Russian\n registerLocaleData(localeIt, 'it', localeExtraIt); // Italian\n registerLocaleData(localeSk, 'sk', localeExtraSk); // Slovak\n registerLocaleData(localePl, 'pl', localeExtraPl); // Polish\n registerLocaleData(localeUk, 'uk', localeExtraUk); // Ukrainian\n registerLocaleData(localeJa, 'ja', localeExtraJa); // Japanese\n registerLocaleData(localeKo, 'ko', localeExtraKo); // Korean\n registerLocaleData(localeHi, 'hi', localeExtraHi); // Hindi\n registerLocaleData(localeBn, 'bn', localeExtraBn); // Bengalese\n registerLocaleData(localeVi, 'vi', localeExtraVi); // Vietnamese\n registerLocaleData(localeTr, 'tr', localeExtraTr); // Turkish\n registerLocaleData(localeNl, 'nl', localeExtraNl); // Dutch\n registerLocaleData(localeNb, 'nb', localeExtraNb); // Norwegian\n registerLocaleData(localeTh, 'th', localeExtraTh); // Thai\n registerLocaleData(localeFi, 'fi', localeExtraFi); // Finnish\n registerLocaleData(localeSv, 'sv', localeExtraSv); // Swedish\n registerLocaleData(localeDeCh, 'de-CH', localeExtraDeCh); // German Swiss\n }\n\n /**\n *\n * @param string lang\n * @returns Observable<Object>\n */\n getTranslation(lang: string): Observable<Record<string, string>> {\n const t = (this.config.translations || []).map((path) => this.loadTranslationFile(path, lang));\n return forkJoin(t).pipe(map((res) => res.reduce((acc, x) => Object.assign(acc, x), {})));\n }\n\n private loadTranslationFile(path: string, lang: string): Observable<any> {\n return this.http.get(`${Utils.getBaseHref()}${path}${lang}.json`).pipe(\n catchError(() => {\n // ISO codes with more than 2 characters are sub-languages like de-CH.\n // If there is no translation file for that sub-language we'll try to load\n // the file for the base language (in this case de).\n return lang.length > 2 ? this.loadTranslationFile(path, lang.substring(0, 2)) : of({});\n })\n );\n }\n}\n","import { HttpClient, provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { EnvironmentProviders, importProvidersFrom, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\nimport { MissingTranslationHandler, TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { AuthInterceptorFnc } from './service/auth/auth.interceptor';\nimport { CoreConfig } from './service/config/core-config';\nimport { CORE_CONFIG, CUSTOM_CONFIG } from './service/config/core-config.tokens';\nimport { OfflineInterceptorFnc } from './service/connection/offline.interceptor';\nimport { init_moduleFnc } from './service/core-init/core-init.service';\nimport { EoxMissingTranslationHandler } from './service/core-init/missing-translation-handler';\nimport { EoxTranslateJsonLoader } from './service/core-init/translate-json-loader';\nimport { CUSTOM_EVENTS, CUSTOM_EVENTS_TRUSTED_ORIGINS } from './service/event/custom.events.token';\n\nexport interface YuvClientCoreConfig {\n translations: string[];\n}\n\nexport const provideYuvClientCore = (\n options: YuvClientCoreConfig = { translations: [] },\n customEvents?: string[],\n customEventsTrustedOrigin?: string[]\n): EnvironmentProviders => {\n return makeEnvironmentProviders([\n importProvidersFrom(TranslateModule.forRoot()),\n provideHttpClient(withInterceptors([AuthInterceptorFnc, OfflineInterceptorFnc])),\n\n { provide: CORE_CONFIG, useClass: CoreConfig, deps: [CUSTOM_CONFIG] },\n provideAppInitializer(init_moduleFnc),\n /**\n * overriding translate modules defaults\n * this works because providers are singletons\n */\n {\n provide: TranslateLoader,\n useClass: EoxTranslateJsonLoader,\n deps: [HttpClient, CORE_CONFIG]\n },\n {\n provide: MissingTranslationHandler,\n useClass: EoxMissingTranslationHandler\n },\n {\n provide: CUSTOM_CONFIG,\n useValue: {\n ...CUSTOM_CONFIG,\n translations: options.translations\n }\n }\n ]);\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableEmpty","i1.ConfigService","i1.BackendService","i2","i3.Logger","i4.SystemService","i5.EventService","i6.ConfigService","tap","map","filter","i1.PendingChangesService","switchMap","i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-core.mjs","sources":["../../../../../libs/yuuvis/client-core/src/lib/service/system/system.enum.ts","../../../../../libs/yuuvis/client-core/src/lib/model/dms-object.model.ts","../../../../../libs/yuuvis/client-core/src/lib/model/yuv-error.model.ts","../../../../../libs/yuuvis/client-core/src/lib/model/yuv-user.model.ts","../../../../../libs/yuuvis/client-core/src/lib/util/utils.helper.enum.ts","../../../../../libs/yuuvis/client-core/src/lib/util/utils.ts","../../../../../libs/yuuvis/client-core/src/lib/service/backend/api.enum.ts","../../../../../libs/yuuvis/client-core/src/lib/service/config/config.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/logger/logger.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/backend/backend.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/search/search.service.interface.ts","../../../../../libs/yuuvis/client-core/src/lib/service/cache/app-cache.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/system/system.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/search/search.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/config/config.interface.ts","../../../../../libs/yuuvis/client-core/src/lib/service/event/custom.events.token.ts","../../../../../libs/yuuvis/client-core/src/lib/service/event/event.interface.ts","../../../../../libs/yuuvis/client-core/src/lib/service/event/event.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/event/events.ts","../../../../../libs/yuuvis/client-core/src/lib/service/user/user.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/audit/audit.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/auth/auth.interface.ts","../../../../../libs/yuuvis/client-core/src/lib/service/config/core-config.tokens.ts","../../../../../libs/yuuvis/client-core/src/lib/service/config/core-config.ts","../../../../../libs/yuuvis/client-core/src/lib/service/object-config/object-config.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/user/user.providers.ts","../../../../../libs/yuuvis/client-core/src/lib/service/auth/auth.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/bpm/bpm.interface.ts","../../../../../libs/yuuvis/client-core/src/lib/service/bpm/bpm.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/catalog/catalog.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/clipboard/clipboard.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/connection/connection.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/core-init/core-init.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/device/device.interface.ts","../../../../../libs/yuuvis/client-core/src/lib/service/device/device.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/upload/upload.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/dms/dms.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/idm/idm.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/toast/toast.styles.ts","../../../../../libs/yuuvis/client-core/src/lib/service/toast/toast.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/notification/notification.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/pending-changes/pending-changes.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/pending-changes/pending-changes-guard.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/pending-changes/pending-changes-dialog.guard.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/pending-changes/pending-changes-tab.guard.directive.ts","../../../../../libs/yuuvis/client-core/src/lib/service/prediction/prediction.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/retention/retention.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/search/search.utils.ts","../../../../../libs/yuuvis/client-core/src/lib/service/session-storage/session-storage.service.ts","../../../../../libs/yuuvis/client-core/src/lib/service/object-form/object-form.model.ts","../../../../../libs/yuuvis/client-core/src/lib/service/user/user-storage.service.ts","../../../../../libs/yuuvis/client-core/src/lib/common/pipes/locale-number.pipe.ts","../../../../../libs/yuuvis/client-core/src/lib/common/pipes/filesize.pipe.ts","../../../../../libs/yuuvis/client-core/src/lib/common/pipes/locale-date.pipe.ts","../../../../../libs/yuuvis/client-core/src/lib/common/pipes/safe-html.pipe.ts","../../../../../libs/yuuvis/client-core/src/lib/common/pipes/keys.pipe.ts","../../../../../libs/yuuvis/client-core/src/lib/common/services/native-notifications.ts","../../../../../libs/yuuvis/client-core/src/lib/service/auth/auth.interceptor.ts","../../../../../libs/yuuvis/client-core/src/lib/service/connection/offline.interceptor.ts","../../../../../libs/yuuvis/client-core/src/lib/service/core-init/missing-translation-handler.ts","../../../../../libs/yuuvis/client-core/src/lib/service/core-init/translate-json-loader.ts","../../../../../libs/yuuvis/client-core/src/lib/provide.client.core.ts","../../../../../libs/yuuvis/client-core/src/yuuvis-client-core.ts"],"sourcesContent":["export const TENANT_HEADER = 'X-ID-TENANT-NAME';\n\nexport enum Situation {\n EDIT = 'EDIT',\n CREATE = 'CREATE',\n SEARCH = 'SEARCH'\n}\n\nexport const SystemType = {\n OBJECT: 'system:object',\n DOCUMENT: 'system:document',\n FOLDER: 'system:folder',\n AUDIT: 'system:audit',\n RELATIONSHIP: 'system:relationship',\n SOT: 'system:secondary'\n};\n\nexport const SystemResult = {\n DELETE: 'system:deletionResult'\n};\n\nexport const AdministrationRoles = {\n ADMIN: 'YUUVIS_TENANT_ADMIN',\n SYSTEM: 'YUUVIS_SYSTEM_INTEGRATOR',\n MANAGE_SETTINGS: 'YUUVIS_MANAGE_SETTINGS'\n};\n\nexport const UserRoles = {\n MULTI_TENANT: 'YUUVIS_MULTI_TENANT'\n};\n\nexport const SystemSOT = {\n DESTRUCTION_RETENTION: 'system:rmDestructionRetention'\n};\n\nexport const RetentionField = {\n RETENTION_END: 'system:rmExpirationDate',\n RETENTION_START: 'system:rmStartOfRetention',\n DESTRUCTION_DATE: 'system:rmDestructionDate'\n};\n\nexport const RelationshipTypeField = {\n SOURCE_ID: 'system:sourceId',\n TARGET_ID: 'system:targetId'\n}\n\nexport const BaseObjectTypeField = {\n OBJECT_TYPE_ID: 'system:objectTypeId',\n VERSION_NUMBER: 'system:versionNumber',\n CREATION_DATE: 'system:creationDate',\n CREATED_BY: 'system:createdBy',\n MODIFICATION_DATE: 'system:lastModificationDate',\n MODIFIED_BY: 'system:lastModifiedBy',\n ...RetentionField,\n PARENT_ID: 'system:parentId',\n PARENT_OBJECT_TYPE_ID: 'system:parentObjectTypeId',\n PARENT_VERSION_NUMBER: 'system:parentVersionNumber',\n TENANT: 'system:tenant',\n ACL: 'system:acl',\n TRACE_ID: 'system:traceId',\n SECONDARY_OBJECT_TYPE_IDS: 'system:secondaryObjectTypeIds',\n BASE_TYPE_ID: 'system:baseTypeId',\n TAGS: 'system:tags',\n OBJECT_ID: 'system:objectId'\n};\n\n// Fields provided by a special secondary object type that most of\n// the object types should have applied to them\nexport const ClientDefaultsObjectTypeField = {\n TITLE: 'appClient:clienttitle',\n DESCRIPTION: 'appClient:clientdescription'\n};\n\nexport const ContentStreamField = {\n LENGTH: 'system:contentStreamLength',\n MIME_TYPE: 'system:contentStreamMimeType',\n FILENAME: 'system:contentStreamFileName',\n ID: 'system:contentStreamId',\n RANGE: 'system:contentStreamRange',\n REPOSITORY_ID: 'system:contentStreamRepositoryId',\n DIGEST: 'system:digest',\n ARCHIVE_PATH: 'system:archivePath'\n};\n\nexport const AuditField = {\n REFERRED_OBJECT_ID: 'system:referredObjectId',\n CREATION_DATE: 'system:creationDate',\n VERSION: 'system:versionNumber',\n DETAIL: 'system:detail',\n CREATED_BY: 'system:createdBy',\n ACTION: 'system:action',\n SUBACTION: 'system:subaction'\n};\n\nexport const ParentField = {\n asvaktenzeichen: 'tenKolibri:asvaktenzeichen',\n asvaktenzeichentext: 'tenKolibri:asvaktenzeichentext',\n asvsichtrechte: 'tenKolibri:asvsichtrechte',\n asvvorgangsname: 'tenKolibri:asvvorgangsname',\n asvvorgangsnummer: 'tenKolibri:asvvorgangsnummer'\n};\n\nexport enum ContentStreamAllowed {\n ALLOWED = 'allowed',\n NOT_ALLOWED = 'notallowed',\n REQUIRED = 'required'\n}\n\n// classifications applied to object type fields\nexport enum Classification {\n STRING_CATALOG_I18N = 'i18n:catalog',\n STRING_CATALOG_CUSTOM = 'custom:catalog',\n STRING_CATALOG_DYNAMIC = 'dynamic:catalog',\n STRING_CATALOG = 'catalog',\n STRING_ORGANIZATION = 'id:organization',\n STRING_ORGANIZATION_SET = 'id:organization:set',\n STRING_REFERENCE = 'id:reference',\n STRING_EMAIL = 'email',\n STRING_URL = 'url',\n STRING_PHONE = 'phone',\n NUMBER_FILESIZE = 'filesize',\n NUMBER_DIGIT = 'digit',\n BOOLEAN_SWITCH = 'switch',\n SYSTEM_SOT = 'systemsot',\n PREDICTION_CLASSIFY = 'prediction:classify',\n TABLE_SORTABLE = 'sortable'\n}\n\n// classifications applied to object types\nexport enum ObjectTypeClassification {\n SEARCH_FALSE = 'appClient:search:false',\n CREATE_FALSE = 'appClient:create:false',\n OBJECT_TYPE_ICON = 'appClient:icon'\n}\n\n// classifications applied to object types\nexport enum ObjectTypePropertyClassification {\n SUMMARY_HIDDEN = 'appClient:summary:hidden'\n}\n\n// classifications applied to secondary object types\nexport enum SecondaryObjectTypeClassification {\n REQUIRED = 'appClient:required',\n PRIMARY = 'appClient:primary',\n EXTENSION_ADD_FALSE = 'appClient:extension:add:false',\n EXTENSION_REMOVE_FALSE = 'appClient:extension:remove:false'\n}\n\n// special internal types of object type fields\nexport enum InternalFieldType {\n STRING_ORGANIZATION_SET = 'string:organization:set',\n STRING_ORGANIZATION = 'string:organization',\n STRING_REFERENCE = 'string:reference',\n STRING_CATALOG = 'string:catalog',\n STRING_CATALOG_I18N = 'string:catalog:i18n',\n STRING_DYNAMIC_CATALOG = 'string:catalog:dynamic',\n BOOLEAN_SWITCH = 'boolean:switch'\n}\n\nexport enum ObjectTag {\n AFO = 'appclient:dlm:prepare'\n}\n\n// possible states of a DLM item\nexport const AFO_STATE = {\n // created but no FSOT assigned so far\n IN_PROGRESS: 0,\n // an FSOT has been assigned\n READY: 1\n};\n\nexport const ColumnConfigSkipFields = [\n BaseObjectTypeField.OBJECT_ID,\n BaseObjectTypeField.OBJECT_TYPE_ID,\n BaseObjectTypeField.PARENT_ID,\n BaseObjectTypeField.PARENT_OBJECT_TYPE_ID,\n BaseObjectTypeField.PARENT_VERSION_NUMBER,\n BaseObjectTypeField.TENANT,\n BaseObjectTypeField.TRACE_ID,\n // BaseObjectTypeField.TAGS,\n BaseObjectTypeField.BASE_TYPE_ID,\n ContentStreamField.ID,\n ContentStreamField.RANGE,\n ContentStreamField.REPOSITORY_ID,\n ContentStreamField.DIGEST,\n ContentStreamField.ARCHIVE_PATH\n];\n","import { ContentStream } from '../service/dms/dms.service.interface';\nimport { SearchResultItem } from '../service/search/search.service.interface';\nimport { BaseObjectTypeField, SystemType } from '../service/system/system.enum';\nimport { DmsObjectAuditInfo, DmsObjectPermissions } from './dms-object.interface';\n/**\n * `DmsObject` is a business object of a type that generally contain a document file in addition to its metadata.\n * Document file can be text documents, e-mails, image files, video, etc.\n * Each object type classifies the object and defines the properties that the object must have or is allowed to have.\n */\nexport class DmsObject {\n id: string;\n parentId: string;\n\n content?: ContentStream;\n data: Record<string, unknown>;\n\n isFolder: boolean;\n objectTypeId: string;\n\n // permissions for the object. If undefined, we do not know the permissions\n permissions?: DmsObjectPermissions;\n // TODO: not clear, objects are collection of sots\n // contentStreamAllowed?: ContentStreamAllowed;\n version: number;\n created: DmsObjectAuditInfo;\n modified: DmsObjectAuditInfo;\n sots: string[] = [];\n\n /**\n * @ignore\n */\n constructor(searchResultItem: SearchResultItem) {\n this.id = searchResultItem.fields.get(BaseObjectTypeField.OBJECT_ID);\n this.version = searchResultItem.fields.get(BaseObjectTypeField.VERSION_NUMBER);\n this.objectTypeId = searchResultItem.objectTypeId;\n this.parentId = searchResultItem.fields.get(BaseObjectTypeField.PARENT_ID);\n this.data = this.#generateData(searchResultItem.fields);\n\n this.isFolder = searchResultItem.fields.get(BaseObjectTypeField.BASE_TYPE_ID) === SystemType.FOLDER;\n // this.contentStreamAllowed = objectType.contentStreamAllowed;\n\n this.created = {\n on: searchResultItem.fields.get(BaseObjectTypeField.CREATION_DATE),\n by: {\n id: searchResultItem.fields.get(BaseObjectTypeField.CREATED_BY),\n title: searchResultItem.fields.get(BaseObjectTypeField.CREATED_BY + '_title')\n }\n };\n this.modified = {\n on: searchResultItem.fields.get(BaseObjectTypeField.MODIFICATION_DATE),\n by: {\n id: searchResultItem.fields.get(BaseObjectTypeField.MODIFIED_BY),\n title: searchResultItem.fields.get(BaseObjectTypeField.MODIFIED_BY + '_title')\n }\n };\n\n if (searchResultItem.content) {\n this.content = searchResultItem.content;\n }\n\n if (searchResultItem.permissions) {\n this.permissions = {\n readIndexData: searchResultItem.permissions.read && searchResultItem.permissions.read.includes('metadata'),\n readContent: searchResultItem.permissions.read && searchResultItem.permissions.read.includes('content'),\n writeIndexData: searchResultItem.permissions.write && searchResultItem.permissions.write.includes('metadata'),\n writeContent: searchResultItem.permissions.write && searchResultItem.permissions.write.includes('content'),\n deleteObject: searchResultItem.permissions.delete && searchResultItem.permissions.delete.includes('object'),\n deleteContent: searchResultItem.permissions.delete && searchResultItem.permissions.delete.includes('content')\n };\n }\n\n this.sots = searchResultItem.fields.get(BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS) || [];\n }\n\n // /**\n // * Get the value (state) of a certain tag\n // * @param name The tags name\n // * @returns The value of the tag or null if the tag does not exist\n // */\n // getTag(name: string): any {\n // const tags: unknown[][] = this.data[BaseObjectTypeField.TAGS] as unknown[][];\n // const tag: unknown[] | null = tags ? (tags.find((t: any) => t[0] === name) as unknown[]) : null;\n // return tag ? tag[1] : null;\n // }\n\n // getRetentionState(): RetentionState {\n // if (this.data[RetentionField.RETENTION_START]) {\n // const retentionStart = new Date(this.data[RetentionField.RETENTION_START] as string);\n // const retentionEnd = new Date(this.data[RetentionField.RETENTION_END] as string);\n // const today = new Date();\n // return retentionStart <= today && today <= retentionEnd\n // ? RetentionState.ACTIVE\n // : today < retentionStart\n // ? RetentionState.INACTIVE\n // : RetentionState.DESTRUCT;\n // } else {\n // return RetentionState.NONE;\n // }\n // }\n\n #generateData(fields: Map<string, any>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, val] of fields.entries()) {\n result[key] = val;\n }\n return result;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\n\n/**\n * @ignore\n */\nexport class YuvError implements Error {\n\n get name() {\n return this._name || this.originalError.name || '';\n }\n\n get message() {\n return this._message || this.originalError.message || '';\n }\n\n get stack() {\n return this.originalError.stack;\n }\n\n get status() {\n return this.originalError.status;\n }\n\n get url() {\n return this.originalError.url;\n }\n\n get skipNotification() {\n return this._skipNotification === undefined ? !!this.originalError.skipNotification : this._skipNotification;\n }\n\n get isHttpErrorResponse() {\n return this.originalError.isHttpErrorResponse || this.originalError instanceof HttpErrorResponse;\n }\n\n constructor(public originalError: any | Error, private _name?: string, private _message?: string, private _skipNotification: boolean = false) {\n }\n\n toString() {\n return this.originalError.toString();\n }\n}\n","import { StoredObjectConfig } from \"../service/object-config/object-config.interface\";\n\n/**\n * User account configuration\n */\nexport class YuvUser {\n\n private DEFAULT_USER_LOCALE = 'en';\n\n id: string;\n username: string;\n firstname: string;\n lastname: string;\n title: string;\n email: string;\n image: string;\n tenant: string;\n domain: string;\n authorities: string[];\n substituteOf: string[];\n enabled: boolean;\n\n /**\n * User settings\n */\n uiDirection?: string;\n /**\n * User settings\n */\n userSettings: UserSettings;\n /**\n * @ignore\n */\n constructor(json: any, userSettings?: UserSettings) {\n this.id = json.id;\n this.username = json.username;\n this.firstname = json.firstname;\n this.lastname = json.lastname;\n this.email = json.email;\n this.image = json.image;\n this.tenant = json.tenant;\n this.domain = json.domain;\n this.authorities = json.authorities;\n this.substituteOf = json.substituteOf;\n this.enabled = json.enabled;\n\n this.title = json.displayName || (this.firstname && this.lastname) ? `${this.lastname}, ${this.firstname} (${this.username})` : this.username;\n this.userSettings = userSettings || { locale: this.DEFAULT_USER_LOCALE };\n }\n\n /**\n * Gets the users configured client locale\n * @returns locale string\n */\n public getClientLocale(fallback?: string): string {\n return this.userSettings?.locale || fallback || this.DEFAULT_USER_LOCALE;\n }\n\n public getFullName(): string {\n return `${this.lastname}, ${this.firstname}`;\n }\n\n public getDisplayNameName(): string {\n return `${this.lastname}, ${this.firstname} (${this.username})`;\n }\n}\n/**\n * Interface for user settings\n */\nexport interface UserSettings {\n locale: string;\n clientAppSettings?: Record<string, any>; \n}\n","export enum Sort {\n ASC = 'asc',\n DESC = 'desc'\n}\n\nexport enum ClassificationPrefix {\n EMAIL = 'mailto:',\n EMAIL_ICON = 'envelope',\n PHONE = 'tel:',\n PHONE_ICON = 'phone',\n URL = '',\n URL_ICON = 'globe'\n}\n\nexport type FormattedMailTo = string | string[];\n","import { EMPTY as observableEmpty } from 'rxjs';\nimport { FormattedMailTo, Sort } from './utils.helper.enum';\nimport { RangeValue } from '../model/range-value.interface';\n\nexport class Utils {\n public static readonly DEFAULT_TIME_OFFSET_V2 = (60000 * 60 * 24) - 1; // T+23:59:59:999\n\n static optionsToURLParams(options: Record<string, any>): string {\n if (options) {\n const searchParams = new URLSearchParams();\n Object.keys(options).map((k) => searchParams.append(k, options[k]));\n return `?${searchParams.toString()}`;\n }\n return '';\n }\n\n /**\n * Get all focusable child elements of a host element.\n * @param host The host/parent element\n * @returns Array of focusable child elements\n */\n public static getFocusableChildren(host: HTMLElement): Element[] {\n return Array.from(host.querySelectorAll('a[href], button, input, textarea, select, details,[tabindex]:not([tabindex=\"-1\"])')).filter(\n (el) => !el.hasAttribute('disabled') && !el.getAttribute('aria-hidden')\n );\n }\n\n public static hasProperty(o: unknown, property: string): boolean {\n if (typeof o !== 'object' || o === null) {\n return false;\n }\n return Object.hasOwn(o, property);\n }\n\n public static patternToRegExp(pattern: string): RegExp {\n return new RegExp(pattern.replaceAll('*', '.*'));\n }\n\n /**\n * Utility method for adding parameters to a given URI.\n *\n * @param uri The uri string to attach the parameters to\n * @param params The object containing parameters to be appended\n * @returns the given uri extended by the given parameters + remove empty parameters\n */\n public static buildUri(uri: string, params: any): string {\n const q = Object.keys(params)\n .filter((k) => !Utils.isEmptyOrFalse(params[k]))\n .map((k) => k + '=' + encodeURIComponent(typeof params[k] === 'object' ? JSON.stringify(params[k]) : params[k]))\n .join('&');\n return uri + (q ? '?' + q : '');\n }\n\n public static formatMailTo(value: FormattedMailTo, isEmail: boolean): FormattedMailTo {\n if (isEmail && !!value) {\n if (Array.isArray(value)) {\n return value.join().replace(/,/g, '; ');\n } else {\n return value.replace(/,/g, '; ');\n }\n }\n return value;\n }\n\n /**\n * Creates a unique identifier.\n * @returns A Universally Unique Identifier\n */\n public static uuid(): string {\n return Utils._p8() + Utils._p8(true) + Utils._p8(true) + Utils._p8();\n }\n\n /**\n * Encode a filename safe for sending chars beyond ASCII-7bit using quoted printable encoding.\n *\n * @param filename The file name\n * @returns The quoted printable filename\n */\n public static encodeFileName(filename: string): string {\n const fileName = Utils.encodeToQuotedPrintable(Utils.encodeToUtf8(filename)).replace(/_/g, '=5F');\n return `=?UTF-8?Q?${fileName}?=`;\n }\n\n /**\n *\n * @param boolean s\n * @return string\n */\n private static _p8(s?: boolean): string {\n const p = (Math.random().toString(16) + '000000000').substr(2, 8);\n return s ? `-${p.substr(0, 4)}-${p.substr(4, 4)}` : p;\n }\n\n /**\n * Converts a javascript text to the utf-8 converted variant.\n * See [unicode]{@link http://thlist.onlinehome.de/thomas_homepage/unicode/UTF-8%20Konvertierung%20mittels%20JavaScript.htm} for reference\n *\n * @param rawinput The input string\n * @returns The utf-8 converted string\n */\n private static encodeToUtf8(rawinput: string) {\n /**\n * Normalize line breaks\n */\n rawinput = rawinput.replace(/\\r\\n/g, '\\n');\n let utfreturn = '';\n for (let n = 0; n < rawinput.length; n++) {\n /**\n * Unicode for current char\n */\n const c = rawinput.charCodeAt(n);\n if (c < 128) {\n /**\n * All chars range 0-127 => 1byte\n */\n utfreturn += String.fromCharCode(c);\n } else if (c > 127 && c < 2048) {\n /**\n * All chars range from 127 to 2047 => 2byte\n */\n utfreturn += String.fromCharCode((c >> 6) | 192);\n utfreturn += String.fromCharCode((c & 63) | 128);\n } else {\n /**\n * All chars range from 2048 to 66536 => 3byte\n */\n utfreturn += String.fromCharCode((c >> 12) | 224);\n utfreturn += String.fromCharCode(((c >> 6) & 63) | 128);\n utfreturn += String.fromCharCode((c & 63) | 128);\n }\n }\n return utfreturn;\n }\n\n /**\n * See [quoted-printable]{@link https://github.com/mathiasbynens/quoted-printable/blob/master/quoted-printable.js}\n **/\n private static quotedPrintable(symbol: string) {\n if (symbol > '\\xFF') {\n throw RangeError('`encodeToQuotedPrintable` expects extended ASCII input only. Missing prior UTF-8 encoding?');\n }\n const codePoint = symbol.charCodeAt(0);\n const hexadecimal = codePoint.toString(16).toUpperCase();\n return '=' + ('0' + hexadecimal).slice(-2);\n }\n\n /**\n * Encode symbols that are definitely unsafe (i.e. unsafe in any context). The regular expression describes these unsafe symbols.\n *\n * @param rawinput Input string to be encoded\n * @returns The encoded string\n */\n private static encodeToQuotedPrintable(rawinput: string): string {\n const encoded = rawinput.replace(/[\\0-\\b\\n-\\x1F=\\x7F-\\uD7FF\\uDC00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]/g, this.quotedPrintable);\n return encoded;\n }\n\n /**\n * Sorts An Array of Object by given key\n * See [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}\n *\n * @param key\n * @param order\n * @param locales\n * @param options\n * @returns (a: any, b: any) => number\n */\n public static sortValues(key = '', order = Sort.ASC, locales?: string | string[], options?: Intl.CollatorOptions) {\n const f = (a: any, b: any) => {\n let comparison: number;\n const varA = Utils.getProperty(a, key);\n const varB = Utils.getProperty(b, key);\n\n if (typeof varA === 'number' && typeof varB === 'number') {\n comparison = varA - varB;\n } else if (varA instanceof Date && varB instanceof Date) {\n comparison = new Date(varA).getTime() - new Date(varB).getTime();\n } else {\n const stringA = varA || varA === 0 ? varA.toString() : '';\n const stringB = varB || varB === 0 ? varB.toString() : '';\n comparison = stringA.localeCompare(stringB, locales, options);\n }\n return order === Sort.DESC ? comparison * -1 : comparison;\n };\n return f;\n }\n\n /**\n * [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}\n *\n * @param object\n * @param string key\n * @returns any\n */\n public static getProperty(object: any, key = ''): any {\n const f = key ? key.split('.').reduce((o, k) => (o || {})[k], object) : object;\n return f;\n }\n\n /**\n * @param object\n * @param key\n * @param value\n */\n public static setProperty(object: any, key = '', value: any): any {\n const [head, ...rest] = key.split('.');\n !rest.length ? (object[head] = value) : Utils.setProperty(object[head] || (object[head] = {}), value, rest.join('.'));\n }\n\n /**\n * Use on Observable.catch or Observable.subscribe to return empty value\n * [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}\n *\n * @param (error) => any callback\n * @returns (error) => Observable<never>\n */\n public static empty(callback?: (error: any) => any) {\n const f = () => {\n return observableEmpty;\n };\n return f;\n }\n\n // /**\n // * Use on Observable.catch with specific skipNotification function !!!\n // * [ng-packagr issues 696]{@link https://github.com/dherges/ng-packagr/issues/696}\n // *\n // * @param skipNotification\n // * @param callback\n // * @param name\n // * @param message\n // */\n // public static catchSkip(skipNotification?: (error: any) => any, callback?: (error: any) => any, name?: string, message?: string) {\n // const f = (error: any) => {\n // const _error = callback && callback(error);\n // const _skipNotification = skipNotification && skipNotification(error);\n // return throwError(() => new YuvError(_error instanceof Error ? _error : error, name, message, _skipNotification));\n // };\n // return f;\n // }\n\n // /**\n // * Use on Observable.catch !!!\n // * [ng-packagr issues]{@link https://github.com/dherges/ng-packagr/issues/696}\n // *\n // * @param callback\n // * @param name\n // * @param message\n // * @param skipNotification\n // * @return (error) => Observable<never>\n // */\n // public static catch(callback?: (error: any) => any, name?: string, message?: string, skipNotification?: boolean) {\n // const f = (error: any) => {\n // const _error = callback && callback(error);\n // return throwError(() => new YuvError(_error instanceof Error ? _error : error, name, message, skipNotification));\n // };\n // return f;\n // }\n\n // /**\n // * Use on Observable.subscribe !!!\n // * [ng-packagr issues]{@link https://github.com/dherges/ng-packagr/issues/696}\n // *\n // * @param callback\n // * @param name\n // * @param message\n // * @param skipNotification\n // * @return (error) => void\n // */\n // public static throw(callback?: (error: any) => any, name?: string, message?: string, skipNotification?: boolean) {\n // const f = (error: any) => {\n // const _error = callback && callback(error);\n // throw new YuvError(_error instanceof Error ? _error : error, name, message, skipNotification);\n // };\n // return f;\n // }\n\n // /**\n // * Use on Observable.subscribe only if you want to skip notification / toast!!!\n // *\n // * @param callback\n // * @param name\n // * @param message\n // * @param skipNotification\n // * @return (error) => void\n // */\n // public static logError(callback?: (error: any) => any, name?: string, message?: string, skipNotification = true) {\n // return Utils.throw(callback, name, message, skipNotification);\n // }\n\n // /**\n // * Checks if element is visible\n // *\n // * @param elem\n // * @return boolean\n // */\n // public static isVisible(elem: any): boolean {\n // return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n // }\n\n public static getBaseHref(removeTrailingSlash?: boolean) {\n const baseEl = document.getElementsByTagName('base')[0];\n const baseHref = baseEl ? baseEl.getAttribute('href') : undefined;\n return baseHref ? (removeTrailingSlash ? baseHref.substr(0, baseHref.length - 1) : baseHref) : '';\n }\n\n /**\n * Truncate a string (first argument) if it is longer than the given maximum string length (second argument).\n * Return the truncated string with a ... ending or whats provided.\n *\n * @param string str\n * @param number num\n */\n public static truncateString(str: string, num: number, ending = '...') {\n if (str.length > num) {\n if (num > 3) {\n num -= 3;\n }\n str = `${str.substring(0, num)}${ending}`;\n }\n return str;\n }\n\n /**\n * Get the TimeZone Offsest as minutes\n */\n public static getTimezoneOffset(): number {\n return new Date().getTimezoneOffset();\n }\n\n /**\n * Transform to date with yyyy-mm-dd format\n */\n public static transformDate(v: Date | string): string {\n return v && new Date(new Date(v).getTime() - new Date(v).getTimezoneOffset() * 60 * 1000).toISOString().slice(0, 10);\n }\n\n public static isEdge(): boolean {\n return new RegExp('Edge', 'i').test(navigator.userAgent);\n }\n\n public static isFirefox(): boolean {\n return new RegExp('firefox', 'i').test(navigator.userAgent);\n }\n\n public static isSafari(): boolean {\n return new RegExp('^((?!chrome|android|crios|fxios).)*safari', 'i').test(navigator.userAgent);\n }\n\n public static isEmpty(obj: any) {\n if (obj == null || obj === '') {\n return true;\n }\n\n if (typeof obj === 'number') {\n return isNaN(obj);\n }\n\n return typeof obj === 'boolean' ? false : !Object.keys(obj).length;\n }\n\n public static isEmptyOrFalse(val: any) {\n return typeof val === 'boolean' ? !val : Utils.isEmpty(val);\n }\n\n public static escapeHtml(str: string) {\n str = str ? str : '';\n const entityMap: any = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n return String(str).replace(/[&<>\"'\\/]/g, (s) => entityMap[s]);\n }\n\n public static arrayToObject<T>(\n arr: any[] = [],\n keyProperty?: string | ((o: any) => string),\n valueProperty?: string | ((o: any) => any)\n ): { [key: string]: T } {\n const key = typeof keyProperty === 'string' ? (o: any) => o[keyProperty] : keyProperty;\n const value = typeof valueProperty === 'string' ? (o: any) => o[valueProperty] : valueProperty;\n return arr.reduce((acc: any, cur, i) => {\n acc[key ? key(cur) : i] = value ? value(cur) : cur;\n return acc;\n }, {});\n }\n\n // public static navigate(newTab: boolean, router: Router, commands: any[], navigationExtras?: NavigationExtras): Promise<any> {\n // if (newTab) {\n // return new Promise(() => Utils.openWindow(router.serializeUrl(router.createUrlTree(commands, navigationExtras))));\n // } else {\n // return router.navigate(commands, navigationExtras);\n // }\n // }\n\n // public static openWindow(url: string = '', target = '_blank', features?: string): Window | null {\n // return window.open(url.match(new RegExp('^/.+')) ? url.replace(new RegExp('^/'), '') : url, target, features); // relative to host\n // }\n\n public static downloadBlob(content: any, mimeType: string, filename: string): void {\n const bom = new Uint8Array([0xef, 0xbb, 0xbf]); // FORM BOM\n const blob = new Blob([bom, content], { type: 'octet/stream' });\n const a = document.createElement('a');\n const url = window.URL.createObjectURL(blob);\n a.setAttribute('href', url);\n a.setAttribute('download', filename);\n a.click();\n URL.revokeObjectURL(url);\n }\n\n public static isValidDate(value: any): value is Date {\n return value instanceof Date && !isNaN(value.getTime());\n }\n \n public static getDateFrom(value?: Date | string | null): Date | undefined {\n if (!value) return undefined;\n else if (value instanceof Date && this.isValidDate(value)) return value;\n else {\n const parsed = new Date(value);\n return this.isValidDate(parsed) ? parsed : undefined;\n }\n }\n \n public static getDateRangeFrom(dateRange: RangeValue<Date | string>): RangeValue<Date> | undefined {\n const firstValue = this.getDateFrom(dateRange.firstValue);\n if (!firstValue) return undefined;\n return {\n ...dateRange,\n firstValue,\n secondValue: dateRange.secondValue ? this.getDateFrom(dateRange.secondValue) : undefined,\n };\n }\n}\n","// enumeration of API endpoints provided by the backend\nexport enum ApiBase {\n core = 'api',\n apiWeb = 'api-web/api',\n predict = 'predict-api/api',\n // TODO: all custom services are deployed using this base\n custom = 'custom',\n none = ''\n}\n","import { Injectable, inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Utils } from '../../util/utils';\nimport { ApiBase } from '../backend/api.enum';\nimport { YuvConfig, YuvConfigLanguages } from './config.interface';\n/**\n * Load and provide configuration for hole apllication while application is inizialized.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigService {\n private translate = inject(TranslateService);\n\n static GLOBAL_RESOURCES = '/resources/config/';\n\n static PARSER(c: any) {\n return c?.resolved || c?.tenant || c?.global || c || {};\n }\n\n static GLOBAL_MAIN_CONFIG(prefix: 'system' | 'admin' | '' = '') {\n return ConfigService.GLOBAL_RESOURCES_PATH('main-config', prefix);\n }\n\n static GLOBAL_MAIN_CONFIG_LANG(iso = 'en', prefix: 'system' | 'admin' | '' = '') {\n return ConfigService.GLOBAL_RESOURCES_PATH('main-config-language-' + iso, prefix);\n }\n\n static GLOBAL_RESOURCES_PATH(section = '', prefix: 'system' | 'admin' | '' = '') {\n return (prefix ? `/${prefix}` : '') + ConfigService.GLOBAL_RESOURCES + encodeURIComponent(section) + '?filter=resolved';\n }\n\n private cfg?: YuvConfig;\n\n /**\n * Set during app init (see CoreInit)\n * @ignore\n */\n set(cfg: YuvConfig) {\n this.cfg = cfg;\n const languages = this.getClientLocales().map((lang) => lang.iso);\n this.translate.addLangs(languages);\n const browserLang = this.translate.getBrowserLang();\n const defaultLang = browserLang && languages.includes(browserLang) ? browserLang : this.getDefaultClientLocale();\n this.translate.setDefaultLang(defaultLang);\n this.translate.use(defaultLang);\n this.extendTranslations(defaultLang);\n }\n\n get(configKey: string): any {\n return configKey ? Utils.getProperty(this.cfg, configKey) : null;\n }\n\n extendTranslations(translations: any, lang = this.translate.currentLang) {\n const allKeys = translations && Object.keys(this.translate.store?.translations[lang] || {});\n if (translations && !Object.keys(translations).every((k) => allKeys.includes(k))) {\n this.translate.setTranslation(lang, translations, true);\n }\n }\n\n extendConfig(configs: YuvConfig[]) {\n this.set(this._mergeConfigs(configs || []));\n }\n\n private _mergeConfigs(configs: any[]) {\n return configs.reduce((acc, x) => {\n // merge object values on 2nd level\n Object.keys(x).forEach((k) => (!acc[k] || Array.isArray(x[k]) || typeof x[k] !== 'object' ? (acc[k] = x[k]) : Object.assign(acc[k], x[k])));\n return acc;\n }, {});\n }\n\n /**\n * Getter for the available client locales\n * @returns available client locales\n */\n getClientLocales(): YuvConfigLanguages[] {\n return this._getCoreConfig('languages');\n }\n\n getApiBase(api: string = ApiBase.apiWeb, origin = false): string {\n api = api || ApiBase.none;\n const href = api === ApiBase.none ? api : `/${api}`;\n const host = (origin && location.origin) || '';\n return href.startsWith('http') ? href : host + href;\n }\n\n /**\n * Get the default client locale\n * @returns ISO string of the locale\n */\n getDefaultClientLocale() {\n const lang = this.getClientLocales().find((_) => _.fallback);\n return lang ? lang.iso : 'en';\n }\n\n private _getCoreConfig(key: string): any {\n return this.cfg ? (this.cfg.core as any)[key] : undefined;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ConfigService } from '../config/config.service';\nimport { ILogger } from './logger.interface';\n/**\n * @ignore\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class Logger implements ILogger {\n constructor(private config: ConfigService) { }\n\n private styles: { [level: string]: string } = {\n info: 'color:blue',\n debug: 'background: orange',\n warn: 'background: rgba(255,0,0,.2);color: red',\n error: 'background: red; color: #fff'\n };\n\n private apply(fn: string, args: any) {\n args = [`%c${fn}:`, 'font-family: monospace; font-size: 10px; padding: 2px 4px;' + this.styles[fn], ...args];\n return this.shouldLog(fn) ? console && (console as any)[fn] && (console as any)[fn](...args) : null;\n }\n\n public debug(...args: any[]): void {\n this.apply('debug', args);\n }\n\n public error(...args: any[]): void {\n this.apply('error', args);\n }\n\n public info(...args: any[]): void {\n this.apply('info', args);\n }\n\n public log(...args: any[]): void {\n this.apply('log', args);\n }\n\n public warn(...args: any[]): void {\n this.apply('warn', args);\n }\n\n private shouldLog(level: string) {\n let should = false;\n const cfg = this.config.get('core.logging');\n if (!cfg || !cfg.level) return false;\n\n switch (cfg.level) {\n case 'debug': {\n should = true;\n break;\n }\n case 'error': {\n should = ['error'].includes(level);\n break;\n }\n case 'warn': {\n should = ['warn', 'error'].includes(level);\n break;\n }\n case 'info': {\n should = ['info', 'warn', 'error'].includes(level);\n break;\n }\n default: {\n }\n }\n return should;\n }\n}\n","import { HttpClient, HttpHeaders, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { catchError, finalize, shareReplay, tap } from 'rxjs/operators';\nimport { ConfigService } from '../config/config.service';\nimport { ApiBase } from './api.enum';\nimport { HttpDeleteOptions, HttpOptions } from './backend.interface';\nimport { Logger } from '../logger/logger.service';\n\n/**\n * Service for http communication with the yuuvis Momentum backend. Apps \n * should use this service to communicate with the backend instead of default\n * httpClient because required headers are managed and apps do not have\n * to care about preqrequisits.\n * \n */\n@Injectable({ providedIn: 'root' })\nexport class BackendService {\n #http = inject(HttpClient);\n #logger = inject(Logger);\n configService = inject(ConfigService);\n\n #cache = new Map<string, any>();\n #temp = new Map<string, Observable<any>>();\n #headers = new HttpHeaders({\n 'Content-Type': 'application/json'\n });\n\n /**\n * OpenIdConnect authorization headers\n */\n getAuthHeaders() {\n return new HttpHeaders();\n }\n\n /**\n * Add a new header.\n * @param key The headers name\n * @param value The value to be added to the headers. Setting this to null\n * will remove the header\n */\n setHeader(key: string, value: string) {\n if (value && value.length) {\n this.#headers = this.#headers.set(key, value);\n } else {\n this.#headers = this.#headers.delete(key);\n }\n }\n\n /**\n * Wrapped HTTP GET method\n * @param uri The REST URI to be queried\n * @param base The Base URI (backend service) to be used\n * @param requestOptions Additional request options\n * @returns The data retrieved from the given endpoint\n */\n get(uri: string, base?: string, requestOptions?: HttpOptions): Observable<any> {\n return this.#http.get(this.getApiBase(base) + uri, this.getHttpOptions(requestOptions));\n }\n\n /**\n * Wrapped HTTP POST method\n * @param uri The target REST URI\n * @param data Data to be 'posted'\n * @param base The Base URI (backend service) to be used\n * @param requestOptions Additional request options\n * @returns The return value of the target POST endpoint\n */\n public post(uri: string, data?: any, base?: string, requestOptions?: HttpOptions): Observable<any> {\n const baseUri = this.getApiBase(base);\n const payload = data && typeof data === 'object' ? JSON.stringify(data) : data || '';\n return this.#http.post(`${baseUri}${uri}`, payload, this.getHttpOptions(requestOptions));\n }\n\n /**\n * Performs a multipart form data POST request.\n * @param uri The target REST URI\n * @param formData FormData to be 'posted'\n * @param base The Base URI (backend service) to be used\n * @param requestOptions Additional request options (see HttpRequest for details)\n * @returns The return value of the target POST endpoint\n */\n public postMultiPart(uri: string, formData: FormData, base?: string, requestOptions?: any): Observable<any> {\n // Creating a multipart/form-data request like this ensures that the Content-Type is set correctly including\n // the multipart boundary which is required by the server to parse the request.\n // If we would set the Content-Type header to multipart/form-data manually the boundary would be missing\n // and the request would fail.\n // As our post method already sets the Content-Type to application/json we can't use it for multipart requests.\n const req = new HttpRequest('POST', `${this.getApiBase(base)}${uri}`, formData, requestOptions);\n return this.#http.request(req);\n }\n\n /**\n * Wrapped HTTP PATCH method\n * @param uri The target REST URI\n * @param data Data to be 'patched'\n * @param base The Base URI (backend service) to be used\n * @param requestOptions Additional request options\n * @returns The return value of the target PATCH endpoint\n */\n public patch(uri: string, data?: any, base?: string, requestOptions?: HttpOptions): Observable<any> {\n const baseUri = this.getApiBase(base);\n const payload = data ? JSON.stringify(data) : '';\n return this.#http.patch(`${baseUri}${uri}`, payload, this.getHttpOptions(requestOptions));\n }\n\n /**\n * Wrapped HTTP PUT method\n * @param uri The target REST URI\n * @param data Data to be 'posted'\n * @param base The Base URI (backend service) to be used\n * @param requestOptions Additional request options\n * @returns The return value of the target PUT endpoint\n */\n public put(uri: string, data?: any, base?: string, requestOptions?: HttpOptions): Observable<any> {\n return this.#http.put(this.getApiBase(base) + uri, data, this.getHttpOptions(requestOptions));\n }\n\n /**\n * Wrapped HTTP DELETE method\n * @param uri The target REST URI\n * @param base The Base URI (backend service) to be used\n * @param requestOptions Additional request options\n * @returns The return value of the target DELETE endpoint\n */\n public delete(uri: string, base?: string, requestOptions?: HttpDeleteOptions): Observable<any> {\n return this.#http.delete(this.getApiBase(base) + uri, this.getHttpOptions(requestOptions));\n }\n\n /**\n * @ignore\n * Cache for small requests like icons and configs\n *\n * @param string uri\n * @returns Observable<any>\n */\n public getViaCache(uri: string): Observable<any> {\n if (this.#cache.has(uri)) {\n return of(this.#cache.get(uri));\n } else {\n const requestOptions: any = {\n responseType: 'text',\n headers: this.getAuthHeaders()\n };\n return this.getViaTempCache(uri, () => this.#http.get(uri, requestOptions).pipe(tap((text) => this.#cache.set(uri, text))));\n }\n }\n\n /**\n * @ignore\n * Temporary Cache for multiple identical requests\n *\n * @param string id\n * @param Function request\n * @returns Observable<any>\n */\n public getViaTempCache(id: string, request?: () => Observable<object>): Observable<any> {\n if (this.#temp.has(id)) {\n return this.#temp.get(id)!;\n } else {\n const resp = (request ? request() : this.get(id)).pipe(\n finalize(() => this.#temp.delete(id)),\n shareReplay(1)\n );\n this.#temp.set(id, resp);\n return resp;\n }\n }\n\n public download(uri: string, filename?: string) {\n if (document && document.body) {\n const a = document.createElement('a');\n a.setAttribute('href', uri);\n a.style.display = 'none';\n a.setAttribute('download', filename || 'download');\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n } else {\n this.#logger.error('Environment not supported. Downloading contents relies on a DOM being available.');\n }\n }\n\n /**\n * Gets the base URI for an API endpoint\n * @param api The API to get the base URI for. Leaving this blank will return\n * base URI for the web API\n * @param origin The flag to include location origin\n * @returns Base URI for the given API.\n */\n getApiBase(api: string = ApiBase.apiWeb, origin = false): string {\n return this.configService.getApiBase(api, origin);\n }\n\n /**\n * @ignore\n */\n getHttpOptions(requestOptions?: HttpOptions): HttpOptions {\n // Object.entries(this.getAuthHeaders()).forEach(([h, v]) => this.setHeader(h, v as string));\n this.getAuthHeaders()\n .keys()\n .forEach((k) => this.setHeader(k, this.getAuthHeaders().get(k)!));\n return Object.assign({ headers: this.#headers }, requestOptions);\n }\n\n /**\n * Batch service\n */\n batch(requests: { method?: string; uri: string; body?: any; base?: string; requestOptions?: HttpOptions }[]) {\n const httpRequests = requests.map((r) =>\n (this as any)[(r.method || 'get').toLowerCase()]\n .apply(\n this,\n [r.uri, r.body, r.base, r.requestOptions].filter((a) => a)\n )\n .pipe(catchError((err) => of({ _error: err })))\n );\n return forkJoin(httpRequests) as Observable<any[]>;\n }\n}\n","import { ContentStream, CoreApiObject } from '../dms/dms.service.interface';\n\nexport type DateRange = 'today' | 'yesterday' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth' | 'thisYear' | 'lastYear';\nexport type FilesizeRange = 'small' | 'medium' | 'large' | 'verylarge';\n\nexport interface SearchQuery {\n // -- Fulltext --\n // Search term\n term?: string;\n // where to search\n scope?: 'metadata' | 'content';\n\n // -- Pagination --\n // Number of items to return\n size?: number;\n // Number of items to skip (offset)\n from?: number;\n\n // -- Fields --\n // Object fields to return\n fields?: string[];\n\n // -- Aggregations --\n // Aggregations to return\n aggs?: string[];\n\n // -- Object Types --\n // Object types (incl. SOTs) to search for\n types?: string[];\n\n // -- Filters --\n // Filter by field\n filters?: SearchFilter[];\n // filters to be applied to table columns\n tableFilters?: TableFilter[];\n\n // -- Sort --\n // Sort by field\n sort?: SortOption[];\n includePermissions?: boolean;\n}\n\nexport interface SortOption {\n field: string;\n order: 'asc' | 'desc';\n}\n\nexport interface SearchFilter {\n // field to filter by\n f: string;\n o: Operator;\n // value for the filter\n v1: unknown;\n // optional second value for interval filters\n v2?: unknown;\n // whether to negate the filter\n useNot?: boolean;\n}\n\nexport interface TableFilter {\n table: string;\n columnFilters: SearchFilter[];\n}\n\nexport enum Operator {\n EQUAL = 'eq', // equal\n EEQUAL = 'eeq', // exact equal\n IN = 'in', // match at least one of the provided values (value has to be an array)\n GREATER_THAN = 'gt', // greater than\n GREATER_OR_EQUAL = 'gte', // greater than or equal\n LESS_THAN = 'lt', // less than\n LESS_OR_EQUAL = 'lte', // less than or equal\n INTERVAL = 'gtlt', // interval\n INTERVAL_INCLUDE_BOTH = 'gtelte', // interval include left and right\n INTERVAL_INCLUDE_TO = 'gtlte', // interval include right\n INTERVAL_INCLUDE_FROM = 'gtelt', // interval include left\n RANGE = 'rg', // aggegation ranges\n LIKE = 'like', // like\n CONTAINS = 'contains' // contains\n}\nexport const OperatorLabel = {\n /** equal */\n EQUAL: '=',\n /** exact equal */\n EEQUAL: '==',\n /** match at least one of the provided values (value has to be an array) */\n IN: '~',\n /** greater than */\n GREATER_THAN: '>',\n /** greater than or equal */\n GREATER_OR_EQUAL: '≽', //\n LESS_THAN: '<', // less than\n LESS_OR_EQUAL: '≼', // less than or equal\n INTERVAL: '<>', // interval\n INTERVAL_INCLUDE_BOTH: '-', // interval include left and right\n INTERVAL_INCLUDE_TO: '>-', // interval include right\n INTERVAL_INCLUDE_FROM: '-<', // interval include left\n RANGE: '=', // aggegation ranges\n LIKE: '~', // like\n CONTAINS: '~' // contains\n};\n\n// ---------------------------------------------------------------------------------\n// ---------------------------------------------------------------------------------\n// ---------------------------------------------------------------------------------\n// ---------------------------------------------------------------------------------\n// ---------------------------------------------------------------------------------\n// ---------------------------------------------------------------------------------\n\nexport interface SearchResponse {\n hasMoreItems: boolean;\n numItems: number;\n totalNumItems: number;\n objects: CoreApiObject[];\n}\n\n/**\n * Interface providing a search service\n */\nexport interface SearchResult {\n hasMoreItems: boolean;\n totalNumItems: number;\n items: SearchResultItem[];\n // object types within the result\n objectTypes: string[];\n // current page of the search result.\n paging?: {\n page: number;\n totalPages: number;\n };\n}\n/**\n * Interface for the item of search results\n */\nexport interface SearchResultItem {\n objectTypeId: string;\n content?: SearchResultContent;\n permissions?: SearchResultPermissions;\n fields: Map<string, any>;\n}\n\nexport interface SearchResultPermissions {\n read: Array<'metadata' | 'content'>;\n write: Array<'metadata' | 'content'>;\n delete: Array<'object' | 'content'>;\n}\n\nexport type SearchResultContent = ContentStream;\n// /**\n// * Interface providing search query properties, that can be send to\n// * the search service\n// */\n// export interface SearchQueryProperties {\n// term?: string;\n// size?: number;\n// fields?: string[];\n// from?: number;\n// aggs?: string[];\n// maxItems?: number;\n// types?: string[]; // mixed list of primary and secondary object types\n// lots?: string[]; // list of leading object types\n// filters?: any;\n// hiddenFilters?: any; // hidden filters that will be combined with SearchQuery filters via search service\n// tableFilters?: any; // table filters that allows to search complex queries\n// sort?: any;\n// tags?: any;\n// scope?: 'all' | 'metadata' | 'content';\n// }\n\n/**\n * Interface providing the estimated result of the current query.\n */\nexport interface AggregateResult {\n /**\n * number of results found\n */\n totalNumItems: number;\n aggregations: Aggregation[];\n}\n\nexport interface AggregationEntry {\n key: string;\n count: number;\n}\n\n/**\n * Property of a one search query aggregation\n */\nexport interface Aggregation {\n aggKey: string;\n entries: AggregationEntry[];\n}\n","import { inject, Injectable } from '@angular/core';\nimport { StorageMap } from '@ngx-pwa/local-storage';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { first, map, switchMap } from 'rxjs/operators';\n\n/**\n * Service for saving or caching data on the users device. It uses the most efficient storage\n * available (IndexDB, localstorage, ...) on the device. Depending on the type of storage used,\n * its limitations apply.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AppCacheService {\n #storage = inject(StorageMap);\n\n setItem(key: string, value: any): Observable<boolean> {\n return this.#storage.set(key, value).pipe(map(() => true));\n }\n\n getItem(key: string): Observable<any> {\n return this.#storage.get(key);\n }\n\n removeItem(key: string): Observable<boolean> {\n return this.#storage.delete(key).pipe(map(() => true));\n }\n\n clear(filter?: (key: any) => boolean): Observable<boolean> {\n return filter\n ? this.getStorageKeys().pipe(\n switchMap((keys) => {\n const list = keys.filter((k: any) => filter(k)).map((k: any) => this.removeItem(k));\n return list.length ? forkJoin(list).pipe(map(() => true)) : of(true);\n })\n )\n : this.#storage.clear().pipe(map(() => true));\n }\n\n getStorageKeys(): Observable<string[]> {\n return new Observable<string[]>((observer) => {\n const keys: string[] = [];\n this.#storage.keys().subscribe({\n next: (key) => keys.push(key),\n complete: () => observer.next(keys)\n });\n }).pipe(first());\n }\n\n setStorage(options: any): Observable<any> {\n return forkJoin(Object.keys(options || {}).map((k) => this.setItem(k, options[k])));\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { forkJoin, Observable, of, ReplaySubject } from 'rxjs';\nimport { catchError, filter, map, switchMap, tap } from 'rxjs/operators';\nimport { Utils } from '../../util/utils';\nimport { ApiBase } from '../backend/api.enum';\nimport { BackendService } from '../backend/backend.service';\nimport { AppCacheService } from '../cache/app-cache.service';\nimport { Logger } from '../logger/logger.service';\nimport { AuthData } from './../auth/auth.service';\nimport { BaseObjectTypeField, Classification, ContentStreamAllowed, InternalFieldType, ObjectTypeClassification, SystemType } from './system.enum';\nimport {\n ClassificationEntry,\n GenericObjectType,\n Localization,\n ObjectType,\n ObjectTypeField,\n ObjectTypePermissions,\n Relationship,\n SchemaResponse,\n SchemaResponseFieldDefinition,\n SchemaResponseTypeDefinition,\n SecondaryObjectType,\n SystemDefinition\n} from './system.interface';\nimport { ObjectTypeFieldInternalType, ObjectTypeFieldType } from '../object-form/object-form.interface';\n\n/**\n * Providing system definitions.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SystemService {\n #backend = inject(BackendService);\n #appCache = inject(AppCacheService);\n #logger = inject(Logger);\n\n #STORAGE_KEY = 'yuv.core.system.definition';\n #STORAGE_KEY_AUTH_DATA = 'yuv.core.auth.data';\n #STORAGE_KEY_FORMS = 'yuv.core.forms__';\n // cached icons to avoid backend calls (session cache)\n #iconCache: {\n [objectTypeId: string]: {\n uri: string;\n icon?: string;\n };\n } = {};\n #resolvedClassificationsCache: { [objectTypeId: string]: any } = {};\n\n system?: SystemDefinition;\n #systemSource = new ReplaySubject<SystemDefinition>();\n system$: Observable<SystemDefinition> = this.#systemSource.asObservable();\n\n // cache for resolved visible tags because they are used in lists and therefore should not be re-evaluated all the time\n #visibleTagsCache: { [objectId: string]: { [tagName: string]: any[] } } = {};\n #permissions?: ObjectTypePermissions;\n authData?: AuthData;\n\n /**\n * Get all object types\n * @param withLabels Whether or not to also add the types labels\n */\n getObjectTypes(withLabels?: boolean, situation?: 'search' | 'create'): GenericObjectType[] {\n // Filter by user permissions based on situation\n const objectTypes = this.#filterByPermissions(\n [...this.system!.objectTypes, ...this.system!.secondaryObjectTypes.map((sot) => this.#sotToGenericType(sot))],\n situation\n ) as GenericObjectType[];\n return withLabels ? objectTypes.map((t) => ({ ...t, label: this.getLocalizedResource(`${t.id}_label`) })) : objectTypes;\n }\n\n #sotToGenericType(sot: SecondaryObjectType): GenericObjectType {\n return {\n ...sot,\n isFolder: false,\n creatable: true,\n secondaryObjectTypes: [],\n isSot: true\n };\n }\n\n /**\n * Get all secondary object types\n * @param withLabels Whether or not to also add the types labels\n */\n getSecondaryObjectTypes(withLabels?: boolean, situation?: 'search' | 'create'): SecondaryObjectType[] {\n const sots = this.#filterByPermissions(\n this.system!.secondaryObjectTypes.map((sot) => this.#sotToGenericType(sot)),\n situation\n ) as SecondaryObjectType[];\n\n return (\n (withLabels ? sots.map((t) => ({ ...t, label: this.getLocalizedResource(`${t.id}_label`) })) : sots)\n // ignore\n .filter((t) => t.id !== t.baseId && !t.id.startsWith('system:') && t.id !== 'appClientsystem:leadingType')\n );\n }\n\n #filterByPermissions(types: GenericObjectType[], situation?: 'search' | 'create'): GenericObjectType[] {\n if (!situation) return types;\n const allowedTypes = situation === 'search' ? this.#permissions!.searchableObjectTypes : this.#permissions!.createableObjectTypes;\n return types.filter((t) => allowedTypes.includes(t.id));\n }\n\n /**\n * Get a particular object type\n * @param objectTypeId ID of the object type\n * @param withLabel Whether or not to also add the types label\n */\n getObjectType(objectTypeId: string, withLabel?: boolean): GenericObjectType | undefined {\n let objectType: GenericObjectType | undefined =\n objectTypeId === SystemType.OBJECT ? this.getBaseType() : this.system!.objectTypes.find((ot) => ot.id === objectTypeId);\n\n if (objectType && withLabel) {\n objectType.label = this.getLocalizedResource(`${objectType.id}_label`) || objectTypeId;\n }\n\n if (!objectType) {\n // no 'real' object type found. Try to find a matching SOT and treat it like a real type\n // by filling up the missing properties\n const sot = this.getSecondaryObjectType(objectTypeId, withLabel);\n if (sot) {\n objectType = this.#sotToGenericType(sot);\n }\n }\n return objectType;\n }\n\n /**\n * Get a particular secondary object type\n * @param objectTypeId ID of the object type\n * @param withLabel Whether or not to also add the types label\n */\n getSecondaryObjectType(objectTypeId: string, withLabel?: boolean): SecondaryObjectType | undefined {\n const objectType: SecondaryObjectType | undefined = this.system!.secondaryObjectTypes.find((ot) => ot.id === objectTypeId);\n if (objectType && withLabel) {\n objectType.label = this.getLocalizedResource(`${objectType.id}_label`) || objectType.id;\n }\n return objectType;\n }\n\n getRelationship(id: string, withLabel?: boolean): Relationship | undefined {\n const relationship: Relationship | undefined = this.system!.relationships.find((r) => r.id === id);\n if (relationship && withLabel) {\n relationship.label = this.getLocalizedResource(`${relationship.id}_label`) || relationship.id;\n }\n return relationship;\n }\n\n /**\n * Get the base document type all documents belong to\n * @param withLabel Whether or not to also add the types label\n */\n getBaseDocumentType(withLabel?: boolean): ObjectType {\n return this.getObjectType(SystemType.DOCUMENT, withLabel)!;\n }\n\n /**\n * Get the base folder type all folders belong to\n * @param withLabel Whether or not to also add the types label\n */\n getBaseFolderType(withLabel?: boolean): ObjectType {\n return this.getObjectType(SystemType.FOLDER, withLabel)!;\n }\n\n /**\n * Get the base object type all dms objects belong to\n */\n getBaseType(): ObjectType {\n const sysFolder = this.getBaseFolderType();\n const sysDocument = this.getBaseDocumentType();\n\n // base type contains only fields that are shared by base document and base folder ...\n const folderTypeFieldIDs = sysFolder.fields.map((f) => f.id);\n const baseTypeFields: ObjectTypeField[] = sysDocument.fields.filter((f) => folderTypeFieldIDs.includes(f.id));\n\n return {\n id: SystemType.OBJECT,\n creatable: false,\n isFolder: false,\n secondaryObjectTypes: [],\n fields: baseTypeFields\n // rawFields: baseTypeFields\n };\n }\n\n /**\n * Get the resolved object type with all fields ( including fields from related secondary types )\n */\n getResolvedType(objectTypeId?: string): { id: string; fields: ObjectTypeField[] } {\n const abstractTypes = Object.values(SystemType);\n if (!objectTypeId || abstractTypes.includes(objectTypeId)) {\n const baseType = this.getBaseType();\n return { id: baseType.id, fields: baseType.fields };\n }\n\n const ot = this.getObjectType(objectTypeId);\n if (!ot) {\n const sot = this.getSecondaryObjectType(objectTypeId) || { id: objectTypeId, fields: [] };\n const baseType = this.getBaseType();\n return {\n id: sot.id,\n fields: [...sot.fields, ...baseType.fields]\n };\n }\n\n return {\n id: ot.id,\n fields: ot.fields\n };\n }\n\n /**\n * Get the resolved object tags\n */\n getResolvedTags(objectTypeId: string): { id: string; tagName: string; tagValues: any; fields: ObjectTypeField[] }[] {\n const vTags = this.getVisibleTags(objectTypeId);\n return Object.keys(vTags).map((k) => ({\n id: objectTypeId,\n tagName: k,\n tagValues: vTags[k],\n fields: this.getBaseType().fields.filter((f) => f.id === BaseObjectTypeField.TAGS)\n }));\n }\n\n /**\n * Get a list of classifications for a given object type including the\n * classifications of its static secondary object types\n * @param objectTypeId ID of the object type\n */\n getResolvedClassifications(objectTypeId: string): string[] {\n return this.#resolvedClassificationsCache[objectTypeId] || this.#resolveClassifications(objectTypeId);\n }\n\n #resolveClassifications(objectTypeId: string): string[] {\n let classifications: string[] = [];\n const ot = this.getObjectType(objectTypeId);\n if (ot) {\n classifications = ot.classification || [];\n const staticSOTs: string[] = ot.secondaryObjectTypes ? ot.secondaryObjectTypes.filter((sot) => sot.static).map((sot) => sot.id) : [];\n staticSOTs.forEach((id) => {\n const sot = this.getSecondaryObjectType(id);\n classifications = sot?.classification\n ? [\n ...classifications,\n ...sot.classification.filter((c) => {\n // also filter classifications that should not be inherited\n return c !== ObjectTypeClassification.CREATE_FALSE && c !== ObjectTypeClassification.SEARCH_FALSE;\n })\n ]\n : classifications;\n });\n this.#resolvedClassificationsCache[objectTypeId] = classifications;\n }\n return classifications;\n }\n\n /**\n * Visible tags are defined by a classification on the object type (e.g. 'tag[tenkolibri:process,1,2,3]').\n *\n * The example will only return tags with the name 'tenkolibri:process'\n * and values of either 1, 2 or 3. All other tags will be ignored.\n *\n * @param objectTypeId ID of the object type to get the visible tags for\n * @returns object where the property name is the name of the tag and its value are the visible values\n * for that tag (if values is emoty all values are allowed)\n */\n getVisibleTags(objectTypeId: string): { [tagName: string]: any[] } {\n return this.#visibleTagsCache[objectTypeId] || this.fetchVisibleTags(objectTypeId);\n }\n\n private fetchVisibleTags(objectTypeId: string): { [tagName: string]: any[] } {\n const ot = this.getObjectType(objectTypeId) || this.getSecondaryObjectType(objectTypeId);\n const tagClassifications = this.getResolvedClassifications(objectTypeId).filter((t) => t.startsWith('tag['));\n const parentType = ot && (ot as ObjectType).id;\n\n const to: { [tagName: string]: any[] } = {};\n (tagClassifications || []).forEach((tag) => {\n const m = tag.match(/\\[(.*)\\]/i)![1].split(',');\n const tagName = m.splice(0, 1)[0];\n const tagValues = m.map((v) => parseInt(v.trim()));\n to[tagName] = tagValues;\n });\n\n this.#visibleTagsCache[objectTypeId] = parentType ? { ...this.getVisibleTags(parentType), ...to } : to;\n return this.#visibleTagsCache[objectTypeId];\n }\n\n filterVisibleTags(objectTypeId: string, tagsValue: Array<Array<any>>): Array<Array<any>> {\n if (!tagsValue) return [];\n const vTags: { [tagName: string]: any[] } = this.getVisibleTags(objectTypeId);\n // Tag value looks like this: [tagName: string, state: number, date: Date, traceId: string]\n return tagsValue.filter((v: any[]) => !!vTags[v[0]] && vTags[v[0]].includes(v[1]));\n }\n\n /**\n * Get the icon for an object type. This will return an SVG as a string.\n * @param objectTypeId ID of the object type\n * @param fallback ID of a fallback icon that should be used if the given object type has no icon yet\n */\n getObjectTypeIcon(objectTypeId: string, fallback?: string): Observable<string> {\n if (this.#iconCache[objectTypeId] && this.#iconCache[objectTypeId].icon) {\n return of(this.#iconCache[objectTypeId].icon!);\n } else {\n const iconUri = this.getObjectTypeIconUri(objectTypeId, fallback);\n return this.#backend\n .get(iconUri, ApiBase.none, {\n responseType: 'text'\n })\n .pipe(tap((icon) => (this.#iconCache[objectTypeId] = { uri: iconUri, icon })));\n }\n }\n\n /**\n * Get the URI of an object type icon.\n * @param objectTypeId ID of the object type\n * @param fallback ID of a fallback icon that should be used if the given object type has no icon yet\n */\n getObjectTypeIconUri(objectTypeId: string, fallback?: string): string {\n if (this.#iconCache[objectTypeId]) {\n return this.#iconCache[objectTypeId].uri;\n } else {\n const ci = this.#getIconFromClassification(objectTypeId);\n const fb = this.getFallbackIcon(objectTypeId, fallback);\n const uri = `/resources/icons/${encodeURIComponent(ci || objectTypeId)}${fb ? `?fallback=${encodeURIComponent(fb)}` : ''}`;\n this.#iconCache[objectTypeId] = { uri: `${this.#backend.getApiBase(ApiBase.apiWeb)}${uri}` };\n return this.#iconCache[objectTypeId].uri;\n }\n }\n\n private getFallbackIcon(objectTypeId: string, fallback?: string): string {\n const ot = this.getObjectType(objectTypeId);\n if (ot && !fallback) {\n // add default fallbacks for system:document and system:folder if now other fallback has been provided\n fallback = ot.isFolder ? 'system:folder' : 'system:document';\n // if (this.isFloatingObjectType(ot)) {\n // // types that do not have no object type assigned to them (primary FSOTs)\n // fallback = 'system:dlm';\n // }\n }\n return fallback!;\n }\n\n #getIconFromClassification(objectTypeId: string) {\n const ce: Map<string, ClassificationEntry> = this.getClassifications(this.getResolvedClassifications(objectTypeId));\n return ce.has(ObjectTypeClassification.OBJECT_TYPE_ICON) ? ce.get(ObjectTypeClassification.OBJECT_TYPE_ICON)!.options[0] : null;\n }\n\n getLocalizedResource(key: string): string {\n try {\n return this.system!.i18n[key];\n } catch (error) {\n return key;\n }\n }\n\n getLocalizedLabel(id: string) {\n return this.getLocalizedResource(`${id}_label`);\n }\n\n getLocalizedDescription(id: string) {\n return this.getLocalizedResource(`${id}_description`);\n }\n\n /**\n * Determine whether or not the given object type field is a system field\n * @param field Object type field to be checked\n */\n isSystemProperty(field: ObjectTypeField): boolean {\n return field.id.startsWith('system:');\n }\n\n /**\n * Fetches the backends system definition and updates system$ Observable.\n * Subscribe to the system$ observable instead of calling this function, otherwise you'll trigger fetching the\n * system definition every time.\n *\n * @param user The user to load the system definition for\n */\n getSystemDefinition(authData?: AuthData): Observable<boolean> {\n this.#clearObjectTypeFormCache();\n\n // TODO: Supposed to return 304 if nothing changes\n return this.#fetchSystemDefinition(authData);\n\n // TODO: remove when 304 is there???\n // // try to fetch system definition from cache first\n // return this.appCache.getItem(this.STORAGE_KEY).pipe(\n // switchMap(res => {\n // if (res) {\n // // check if the system definition from the cache is up to date\n // this.system = res;\n // this.systemSource.next(this.system);\n // return of(true);\n // } else {\n // // nothing cached so far\n // return this.fetchSystemDefinition();\n // }\n // })\n // );\n }\n\n /**\n * Actually fetch the system definition from the backend.\n * @param user User to fetch definition for\n */\n #fetchSystemDefinition(authData?: AuthData): Observable<boolean> {\n return (authData ? of(authData) : this.#appCache.getItem(this.#STORAGE_KEY_AUTH_DATA)).pipe(\n switchMap((data: AuthData) => {\n this.updateAuthData(data).subscribe();\n const fetchTasks = [this.#backend.get('/dms/schema/native.json', ApiBase.core), this.#fetchLocalizations()];\n return forkJoin(fetchTasks);\n }),\n catchError((error) => {\n this.#logger.error('Error fetching recent version of system definition from server.', error);\n this.#systemSource.error('Error fetching recent version of system definition from server.');\n return of(null);\n }),\n map((data) => {\n if (data?.length) {\n this.setSchema(data[0], data[1]);\n }\n return !!data;\n })\n );\n }\n\n setPermissions(p: ObjectTypePermissions) {\n this.#permissions = p;\n }\n\n /**\n * Create the schema from the servers schema response\n * @param schemaResponse Response from the backend\n */\n setSchema(schemaResponse: SchemaResponse, localizedResource: Localization = {}) {\n // prepare a quick access object for the fields\n const propertiesQA: Record<string, SchemaResponseFieldDefinition> = {};\n const orgTypeFields = [BaseObjectTypeField.MODIFIED_BY, BaseObjectTypeField.CREATED_BY];\n schemaResponse.propertyDefinition.forEach((p: any) => {\n p.classifications = p.classification;\n // TODO: Remove once schema supports organization classification for base params\n // map certain fields to organization type (fake it until you make it ;-)\n if (orgTypeFields.includes(p.id)) {\n p.classifications = [Classification.STRING_ORGANIZATION];\n }\n propertiesQA[p.id] = p;\n });\n // prepare a quick access object for object types (including secondary objects)\n const objectTypesQA: { [id: string]: SchemaResponseTypeDefinition } = {};\n schemaResponse.typeFolderDefinition.forEach((ot: any) => {\n objectTypesQA[ot.id] = ot;\n });\n schemaResponse.typeDocumentDefinition.forEach((ot: any) => {\n objectTypesQA[ot.id] = ot;\n });\n schemaResponse.typeSecondaryDefinition.forEach((sot: any) => {\n objectTypesQA[sot.id] = sot;\n });\n\n const objectTypes: ObjectType[] = [\n // folder types\n ...schemaResponse.typeFolderDefinition.map((fd) => ({\n id: fd.id,\n description: fd.description,\n classification: fd.classification,\n baseId: fd.baseId,\n creatable: this.#isCreatable(fd.id),\n contentStreamAllowed: ContentStreamAllowed.NOT_ALLOWED,\n isFolder: true,\n secondaryObjectTypes: fd.secondaryObjectTypeId ? fd.secondaryObjectTypeId.map((t) => ({ id: t.value, static: t.static })) : [],\n fields: this.#resolveObjectTypeFields(fd, propertiesQA, objectTypesQA)\n // rawFields: this.resolveObjectTypeFields(fd, propertiesQA, objectTypesQA, true),\n })),\n // document types\n ...schemaResponse.typeDocumentDefinition.map((dd) => ({\n id: dd.id,\n description: dd.description,\n classification: dd.classification,\n baseId: dd.baseId,\n creatable: this.#isCreatable(dd.id),\n contentStreamAllowed: dd.contentStreamAllowed,\n isFolder: false,\n secondaryObjectTypes: dd.secondaryObjectTypeId ? dd.secondaryObjectTypeId.map((t) => ({ id: t.value, static: t.static })) : [],\n fields: this.#resolveObjectTypeFields(dd, propertiesQA, objectTypesQA)\n // rawFields: this.resolveObjectTypeFields(dd, propertiesQA, objectTypesQA, true),\n }))\n ];\n\n const secondaryObjectTypes: SecondaryObjectType[] = schemaResponse.typeSecondaryDefinition.map((std) => ({\n id: std.id,\n description: std.description,\n classification: std.classification,\n contentStreamAllowed: std.contentStreamAllowed,\n baseId: std.baseId,\n // TODO: Could a SOT be a folder too?\n isFolder: false,\n fields: this.#resolveObjectTypeFields(std, propertiesQA, objectTypesQA)\n }));\n\n const relationships: Relationship[] = (schemaResponse.typeRelationshipDefinition || []).map((std) => ({\n id: std.id,\n description: std.description,\n baseId: std.baseId,\n fields: this.#resolveObjectTypeFields(std, propertiesQA, objectTypesQA),\n // allowedSourceType\n allowedSourceTypes: std.allowedSourceType.map((t) => t.objectTypeReference),\n allowedTargetTypes: std.allowedTargetType.map((t) => t.objectTypeReference)\n }));\n\n this.system = {\n version: schemaResponse.version,\n lastModificationDate: schemaResponse.lastModificationDate,\n objectTypes,\n secondaryObjectTypes,\n relationships,\n i18n: localizedResource,\n allFields: propertiesQA\n };\n this.#appCache.setItem(this.#STORAGE_KEY, this.system).subscribe();\n this.#systemSource.next(this.system);\n }\n\n /**\n * Resolve all the fields for an object type. This also includes secondary object types and the fields inherited from\n * the base type (... and of course the base type (and its secondary object types) of the base type and so on)\n * @param schemaTypeDefinition object type definition from the native schema\n * @param propertiesQA Quick access object of all properties\n * @param objectTypesQA Quick access object of all object types\n * @param raw If set to 'true' only the properties of the object type itself will be returned (without SOTs)\n */\n #resolveObjectTypeFields(\n schemaTypeDefinition: SchemaResponseTypeDefinition,\n propertiesQA: { [id: string]: SchemaResponseFieldDefinition },\n objectTypesQA: { [id: string]: SchemaResponseTypeDefinition }\n ): ObjectTypeField[] {\n const objectTypeFieldIDs = schemaTypeDefinition.propertyReference.map((pr) => pr.value);\n if (schemaTypeDefinition.secondaryObjectTypeId) {\n schemaTypeDefinition.secondaryObjectTypeId\n .filter((sot) => sot.static)\n .map((sot) => sot.value)\n .forEach((sotID) => objectTypesQA[sotID].propertyReference.forEach((pr: { value: string }) => objectTypeFieldIDs.push(pr.value)));\n }\n\n let fields: ObjectTypeField[] = objectTypeFieldIDs.map((id) => ({\n ...propertiesQA[id],\n _internalType: this.getInternalFormElementType(propertiesQA[id].propertyType, propertiesQA[id].classifications)\n }));\n\n // also resolve properties of the base type\n if (schemaTypeDefinition.baseId !== schemaTypeDefinition.id && !!objectTypesQA[schemaTypeDefinition.baseId]) {\n fields = fields.concat(this.#resolveObjectTypeFields(objectTypesQA[schemaTypeDefinition.baseId], propertiesQA, objectTypesQA));\n }\n return fields;\n }\n\n #isCreatable(objectTypeId: string) {\n return ![SystemType.FOLDER, SystemType.DOCUMENT].includes(objectTypeId);\n }\n\n /**\n * Fetch a collection of form models.\n * @param objectTypeIDs Object type IDs to fetch form model for\n * @param situation Form situation\n * @returns Object where the object type id is key and the form model is the value\n */\n getObjectTypeForms(objectTypeIDs: string[], situation: string): Observable<Record<string, any>> {\n return forkJoin(\n objectTypeIDs.map((o) =>\n this.getObjectTypeForm(o, situation).pipe(\n catchError((e) => of(null)),\n map((res) => ({\n id: o,\n formModel: res\n }))\n )\n )\n ).pipe(\n map((res) => {\n const resMap: Record<string, any> = {};\n res\n .map((r) => (!r.formModel ? { ...r, formModel: this.#generateDefaultFormModel(r.id) } : r))\n .filter((r) => this.#formHasElements(r.formModel))\n .forEach((r: any) => (resMap[r.id] = r.formModel));\n return resMap;\n })\n );\n }\n\n /**\n * Generate a default form model for an object type. This is used when the backend does not return a form model.\n * @param typeId Object type ID or SOT ID\n */\n #generateDefaultFormModel(typeId: string): any {\n const type = this.getObjectType(typeId) || this.getSecondaryObjectType(typeId);\n if (type) {\n return {\n id: type.id,\n label: this.getLocalizedLabel(type.id),\n elements: type.fields.map((f) => this.toFormElement(f)),\n title: this.getLocalizedLabel(type.id),\n description: this.getLocalizedDescription(type.id)\n };\n }\n return null;\n }\n\n /**\n * Get the form model of an object type.\n *\n * @param objectTypeId ID of the object type to fetch the form for\n * @param situation The form situation to be fetched\n * @returns Form model\n */\n getObjectTypeForm(objectTypeId: string, situation: string): Observable<any> {\n return this.#appCache\n .getItem(`${this.#STORAGE_KEY_FORMS}${objectTypeId}_${situation}`)\n .pipe(switchMap((res) => (res ? of(res) : this.#fetchObjectTypeForm(objectTypeId, situation))));\n }\n\n #fetchObjectTypeForm(objectTypeId: string, situation: string): Observable<any> {\n return this.#backend.get(Utils.buildUri(`/dms/forms/${objectTypeId}`, { situation })).pipe(\n // add form to cache\n switchMap((res) => this.#appCache.setItem(`${this.#STORAGE_KEY_FORMS}${objectTypeId}_${situation}`, res).pipe(map(() => res)))\n );\n }\n\n #clearObjectTypeFormCache() {\n // reset cache of object forms\n return this.#appCache\n .getStorageKeys()\n .pipe(\n switchMap((keys: string[]) =>\n forkJoin(keys.filter((key) => key.startsWith(this.#STORAGE_KEY_FORMS)).map((key) => this.#appCache.removeItem(key).pipe(catchError(() => of(null)))))\n )\n )\n .subscribe();\n }\n\n /**\n * Check whether or not the model has at least one form element. Recursive.\n * @param element Form element to check child elements for\n */\n #formHasElements(element: any): boolean {\n let hasElement = false;\n element.elements?.forEach((e: any) => {\n if (!['o2mGroup', 'o2mGroupStack'].includes(e.type)) {\n hasElement = true;\n } else if (!hasElement) {\n hasElement = this.#formHasElements(e);\n }\n });\n return hasElement;\n }\n\n /**\n * Generates an internal type for a given object type field.\n * Adding this to a form element or object type field enables us to render forms\n * based on object type fields in a more performant way. Otherwise we would\n * have to evaluate the conditions for every form element on every digest cycle.\n * @param type propertyType of the ObjectTypeField\n * @param classifications classifications of the ObjectTypeField\n */\n getInternalFormElementType(type: string, classifications?: string[]): ObjectTypeFieldInternalType {\n const _classifications = this.getClassifications(classifications || []);\n\n if (type === 'string' && _classifications.has(Classification.STRING_REFERENCE)) {\n return InternalFieldType.STRING_REFERENCE;\n } else if (type === 'string' && _classifications.has(Classification.STRING_ORGANIZATION)) {\n return InternalFieldType.STRING_ORGANIZATION;\n } else if (type === 'string' && _classifications.has(Classification.STRING_ORGANIZATION_SET)) {\n return InternalFieldType.STRING_ORGANIZATION_SET;\n } else if (type === 'string' && _classifications.has(Classification.STRING_CATALOG_I18N)) {\n return InternalFieldType.STRING_CATALOG_I18N;\n } else if (type === 'string' && _classifications.has(Classification.STRING_CATALOG)) {\n return InternalFieldType.STRING_CATALOG;\n } else if (type === 'boolean' && _classifications.has(Classification.BOOLEAN_SWITCH)) {\n return InternalFieldType.BOOLEAN_SWITCH;\n } else if (\n type === 'string' &&\n (_classifications.has(Classification.STRING_CATALOG_DYNAMIC) || _classifications.has(Classification.STRING_CATALOG_CUSTOM))\n ) {\n return InternalFieldType.STRING_DYNAMIC_CATALOG;\n } else {\n // if there are no matching conditions just return the original type\n return type as ObjectTypeFieldType;\n }\n }\n\n getObjectTypeField(id: string): ObjectTypeField | undefined {\n const f = this.system?.allFields[id];\n return f ? { ...f, _internalType: this.getInternalFormElementType(f.propertyType, f.classifications) } : undefined;\n }\n\n /**\n * Extract classifications from object type fields classification\n * string. This string may contain more than one classification entry.\n *\n * Classification is a comma separated string that may contain additional\n * properties related to on classification entry. Example:\n *\n * `id:reference[system:folder], email`\n *\n * @param classifications Object type fields classification property (schema)\n */\n getClassifications(classifications: string[]): Map<string, ClassificationEntry> {\n const res = new Map<string, ClassificationEntry>();\n if (classifications) {\n classifications.forEach((c) => {\n const matches: RegExpMatchArray | null = c.match(/^([^\\[]*)(\\[(.*)\\])?$/);\n if (matches && matches.length) {\n res.set(matches[1], {\n classification: matches[1],\n options: matches[3] ? matches[3].split(',').map((o) => o.trim()) : []\n });\n }\n });\n }\n return res;\n }\n\n toFormElement(field: ObjectTypeField): any {\n return { ...field, label: this.getLocalizedLabel(field.id), name: field.id, type: field.propertyType };\n }\n\n updateAuthData(data: Partial<AuthData>) {\n this.authData = { ...this.authData!, ...data };\n this.#backend.setHeader('Accept-Language', this.authData.language);\n return this.#appCache.setItem(this.#STORAGE_KEY_AUTH_DATA, this.authData);\n }\n\n updateLocalizations(iso: string): Observable<any> {\n return this.updateAuthData({ language: iso }).pipe(\n switchMap(() => this.#fetchLocalizations()),\n tap((res) => {\n this.system!.i18n = res;\n this.#appCache.setItem(this.#STORAGE_KEY, this.system).subscribe();\n this.#systemSource.next(this.system!);\n })\n );\n }\n\n #fetchLocalizations(): Observable<Localization> {\n return this.#backend.get('/resources/text');\n }\n\n fetchResources(id: string): Observable<{ global: any; tenant: any }> {\n return this.#backend\n .batch([\n { uri: `/system/resources/${id}`, base: ApiBase.core },\n { uri: `/admin/resources/${id}`, base: ApiBase.core }\n ])\n .pipe(map(([global, tenant]) => ({ global, tenant })));\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BackendService } from '../backend/backend.service';\nimport { BaseObjectTypeField, ContentStreamField } from '../system/system.enum';\nimport {\n AggregateResult,\n Aggregation,\n Operator,\n SearchFilter,\n SearchQuery,\n SearchResponse,\n SearchResult,\n SearchResultContent,\n SearchResultItem\n} from './search.service.interface';\nimport { RangeValue } from '../../model/range-value.interface';\nimport { SystemService } from '../system/system.service';\nimport { Utils } from '../../util/utils';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SearchService {\n #backend = inject(BackendService);\n #system = inject(SystemService);\n\n static DEFAULT_QUERY_SIZE = 50;\n\n /**\n * Execute a search query ans transform the result to a SearchResult object\n * @param query The search query\n * @returns Observable of a SearchResult\n */\n search(query: SearchQuery): Observable<SearchResult> {\n return this.searchRaw(query).pipe(map((res) => this.toSearchResult(res, query.size || SearchService.DEFAULT_QUERY_SIZE, query.from || 0)));\n }\n\n /**\n * Execute a raw search query and return the result as is.\n * @param query The search query\n * @returns Observable of the raw search result\n */\n searchRaw(query: SearchQuery): Observable<any> {\n if (!query.size) query.size = SearchService.DEFAULT_QUERY_SIZE;\n return this.#backend.post(`/dms/objects/search`, query);\n }\n\n /**\n * Search for objects in the dms using CMIS like SQL syntax.\n * @param statement The query statement\n * @param size The number of items to return\n * @returns Observable of a SearchResult\n */\n searchCmis(statement: string, size = SearchService.DEFAULT_QUERY_SIZE): Observable<SearchResult> {\n return this.#executeCmisSearch(statement, size);\n }\n\n #executeCmisSearch(statement: string, maxItems: number, skipCount: number = 0): Observable<SearchResult> {\n return this.#backend\n .post(\n '/dms/objects/cmisSearch',\n {\n query: {\n statement,\n skipCount,\n maxItems,\n handleDeletedDocuments: 'DELETED_DOCUMENTS_EXCLUDE'\n }\n }\n // Using API-WEB because it enriches the response with additional information (resolved user names, etc.)\n // ApiBase.core\n )\n .pipe(map((res) => this.toSearchResult(res as SearchResponse, maxItems, skipCount)));\n }\n\n /**\n * Fetch aggragations for a given query.\n * @param q The query\n * @param aggregations List of aggregations to be fetched (e.g. `enaio:objectTypeId`\n * to get an aggregation of object types)\n */\n aggregate(q: SearchQuery, aggregations: string[]) {\n q.aggs = aggregations;\n return this.searchRaw(q).pipe(map((res) => this.#toAggregateResult(res, aggregations)));\n }\n\n /**\n * Map search result from the backend to applications AggregateResult object\n * @param searchResponse The backend response\n * @param aggregations The aggregations to be fetched\n */\n #toAggregateResult(searchResponse: any, aggregations?: string[]): AggregateResult {\n const agg: Aggregation[] = [];\n if (aggregations) {\n aggregations.forEach((a) => {\n const ag: Aggregation = {\n aggKey: a,\n entries: searchResponse.objects.map((o: any) => ({\n key: o.properties[a].value,\n count: o.properties['OBJECT_COUNT'].value\n }))\n };\n agg.push(ag);\n });\n }\n return {\n totalNumItems: searchResponse.totalNumItems,\n aggregations: agg\n };\n }\n\n /**\n * Go to a page of a search result.\n * @param query SearchQuery or CMIS query statement\n * @param page The number of the page to go to\n */\n getPage(query: SearchQuery | string, page: number, pageSize = SearchService.DEFAULT_QUERY_SIZE): Observable<SearchResult> {\n const isCmis = typeof query === 'string';\n if (isCmis) {\n return this.#executeCmisSearch(query as string, pageSize, (page - 1) * pageSize);\n } else {\n query.from = (page - 1) * (query.size || pageSize);\n return this.search(query);\n }\n }\n\n /**\n * Map search result from the backend to applications SearchResult object\n * @param searchResponse The backend response\n */\n toSearchResult(searchResponse: SearchResponse, pageSize: number = SearchService.DEFAULT_QUERY_SIZE, skipCount: number = 0): SearchResult {\n const resultListItems: SearchResultItem[] = [];\n const objectTypes: string[] = [];\n\n searchResponse.objects.forEach((o: any) => {\n const fields = new Map();\n // process properties section of result\n Object.keys(o.properties).forEach((key: string) => {\n let value = o.properties[key].value;\n if (o.properties[key].clvalue) {\n // table fields will have a clientValue too ...\n value = o.properties[key].clvalue;\n // ... and also may contain values that need to be resolved\n if (o.properties[key].resolvedValues) {\n value.forEach((v: any) => {\n Object.keys(v).forEach((k) => {\n const resValue = Array.isArray(v[k]) ? v[k].map((i: any) => o.properties[key].resolvedValues[i]) : o.properties[key].resolvedValues[v[k]];\n if (resValue) {\n v[`${k}_title`] = resValue;\n }\n });\n });\n }\n }\n\n fields.set(key, value);\n if (o.properties[key].title) {\n fields.set(key + '_title', o.properties[key].title);\n }\n });\n\n // process contentStreams section of result if available.\n // Objects that don't have files attached won't have this section\n let content: SearchResultContent | undefined;\n if (o.contentStreams && o.contentStreams.length > 0) {\n // we assume that each result object only has ONE file attached, altough\n // this is an array and there may be more\n const contentStream = o.contentStreams[0];\n // also add contentstream related fields to the result fields\n fields.set(ContentStreamField.LENGTH, contentStream.length);\n fields.set(ContentStreamField.MIME_TYPE, contentStream.mimeType);\n fields.set(ContentStreamField.FILENAME, contentStream.fileName);\n fields.set(ContentStreamField.ID, contentStream.contentStreamId);\n fields.set(ContentStreamField.RANGE, contentStream.contentStreamRange);\n fields.set(ContentStreamField.REPOSITORY_ID, contentStream.repositoryId);\n fields.set(ContentStreamField.DIGEST, contentStream.digest);\n fields.set(ContentStreamField.ARCHIVE_PATH, contentStream.archivePath);\n\n content = {\n contentStreamId: contentStream.contentStreamId,\n repositoryId: contentStream.repositoryId,\n range: contentStream.range,\n digest: contentStream.digest,\n archivePath: contentStream.archivePath,\n fileName: contentStream.fileName,\n mimeType: contentStream.mimeType,\n size: contentStream.length\n };\n }\n\n const objectTypeId = o.properties[BaseObjectTypeField.OBJECT_TYPE_ID] ? o.properties[BaseObjectTypeField.OBJECT_TYPE_ID].value : null;\n if (objectTypes.indexOf(objectTypeId) === -1) {\n objectTypes.push(objectTypeId);\n }\n\n resultListItems.push({\n objectTypeId,\n content,\n fields,\n permissions: o.permissions\n });\n });\n\n const totalPages = Math.ceil(searchResponse.totalNumItems / pageSize);\n const page = (!skipCount ? 0 : skipCount / pageSize) + 1;\n const result: SearchResult = {\n hasMoreItems: searchResponse.hasMoreItems,\n totalNumItems: searchResponse.totalNumItems,\n items: resultListItems,\n objectTypes: objectTypes,\n paging: totalPages > 1 ? { page, totalPages } : undefined\n };\n return result;\n }\n\n /**\n * Maps data extracted from a search form to search filters. Every key of the form data object\n * will be mapped to a search filter.\n * @param formData form data\n * @returns Array of search filters\n */\n formDataToSearchFilter(formData: Record<string, unknown>): SearchFilter[] {\n const isRangeValue = (v: unknown) => {\n return typeof v === 'object' && v !== null && 'firstValue' in v && 'operator' in v;\n };\n\n const filters: SearchFilter[] = [];\n Object.keys(formData).forEach((key) => {\n const value = formData[key];\n if (isRangeValue(value)) {\n const f = this.rangeValueToSearchFilter(value as RangeValue, key);\n if (f) filters.push(f);\n } else {\n filters.push({\n f: key,\n o: Array.isArray(value) ? Operator.IN : Operator.EQUAL,\n v1: value\n });\n }\n });\n return filters;\n }\n\n rangeValueToSearchFilter(value: RangeValue, property: string): SearchFilter | undefined {\n return this.#system.getObjectTypeField(property)?.propertyType === 'datetime'\n ? this.#dateRangeValueToSearchFilter(value as RangeValue<Date | string>, property)\n : {\n f: property,\n o: value.operator,\n v1: value.firstValue,\n v2: value.secondValue\n };\n }\n\n #dateRangeValueToSearchFilter(rv: RangeValue<Date | string>, property: string): SearchFilter | undefined {\n const v1 = rv.firstValue;\n const v2 = rv.secondValue;\n\n switch (rv.operator) {\n case Operator.EQUAL: {\n return {\n f: property,\n o: Operator.INTERVAL_INCLUDE_BOTH,\n v1: this.#dateToISOString(v1, 'start'),\n v2: this.#dateToISOString(v1, 'end')\n };\n }\n case Operator.GREATER_OR_EQUAL: {\n return {\n f: property,\n o: rv.operator,\n v1: this.#dateToISOString(v1)\n };\n }\n case Operator.LESS_OR_EQUAL: {\n return {\n f: property,\n o: rv.operator,\n v1: this.#dateToISOString(v1, 'end')\n };\n }\n case Operator.INTERVAL_INCLUDE_BOTH: {\n return {\n f: property,\n o: rv.operator,\n v1: this.#dateToISOString(v1, 'start'),\n v2: v2 ? this.#dateToISOString(v2, 'end') : ''\n };\n }\n default:\n return undefined;\n }\n }\n\n /**\n * Checks if value is a date and retrieves an ISOString representation. Optionally you can determine, if it should be the beginning or the end of a day.\n *\n * @param value\n * @param range\n * @private\n */\n #dateToISOString(value: Date | string, range: 'start' | 'end' = 'start'): string {\n const date = typeof value === 'string' ? new Date(value) : value;\n const offset = Utils.DEFAULT_TIME_OFFSET_V2; // T+23:59:59:999\n\n if (!Utils.isValidDate(date)) return '';\n\n const isoDateString = date.toISOString();\n // const isoDateStringWithOffset = new Date(date.getTime() + offset).toISOString();\n\n switch (range) {\n case 'start':\n return isoDateString;\n case 'end':\n return isoDateString;\n default:\n return isoDateString;\n }\n }\n}\n","/**\n * Interface for the applications main config file\n * @ignore\n */\nexport interface YuvConfig {\n core: {\n // apiBase: {\n // core: string;\n // 'api-web': string;\n // };\n languages: YuvConfigLanguages[];\n logging?: {\n level: 'debug' | 'error' | 'warn' | 'info';\n };\n permissions?: {\n retentionManagerRole?: string;\n advancedUserRole?: string;\n manageSettingsRole?: string;\n };\n };\n location?: {\n hostname?: string;\n port?: number;\n };\n}\n/**\n * interface providing localization of application\n */\nexport interface YuvConfigLanguages {\n iso: string;\n label: string;\n dir?: Direction;\n fallback?: boolean;\n}\n\nexport enum Direction {\n LTR = 'ltr',\n RTL = 'rtl'\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const CUSTOM_EVENTS = new InjectionToken<string[]>('CUSTOM_EVENTS', { factory: () => [] });\nexport const CUSTOM_EVENTS_TRUSTED_ORIGINS = new InjectionToken<string[]>('CUSTOM_EVENTS_TRUSTED_ORIGINS', { factory: () => [] });\n","/**\n * Triggerable and Subscribable events\n */\nexport interface YuvEvent {\n /**\n * type\n */\n type: string;\n /**\n * data to be passed along with the event\n */\n data?: any;\n}\n\n/**\n * Mandatory Custom event prefix for all custom YUV events\n */\nexport const CUSTOM_YUV_EVENT_PREFIX = 'yuv.';\n\n/**\n * Message event interface for postMessage events\n */\nexport interface YuvMessage {\n type: string;\n data: any;\n timestamp: number;\n source: string;\n}\n","import { inject, Injectable, NgZone } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { CUSTOM_EVENTS, CUSTOM_EVENTS_TRUSTED_ORIGINS } from './custom.events.token';\nimport { CUSTOM_YUV_EVENT_PREFIX, YuvEvent } from './event.interface';\n\n/**\n * Service for providing triggered events\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class EventService {\n readonly #customEvents = inject(CUSTOM_EVENTS);\n readonly #customEventsTrustedOrigins = inject(CUSTOM_EVENTS_TRUSTED_ORIGINS);\n readonly #ngZone = inject(NgZone);\n #eventSource = new Subject<YuvEvent>();\n event$: Observable<YuvEvent> = this.#eventSource.asObservable();\n\n constructor() {\n this.#listenToWindowEvents();\n }\n\n #startsWithAllowed(value: unknown): boolean {\n return typeof value === 'string' && this.#customEvents.some((prefix) => value.startsWith(prefix));\n }\n\n #isValidExternalMessage(event: MessageEvent): boolean {\n this.#customEvents.push(CUSTOM_YUV_EVENT_PREFIX);\n\n if (!event.data || typeof event.data !== 'object') return false;\n if (!this.#startsWithAllowed(event.data.source) || !this.#startsWithAllowed(event.data.type)) return false;\n // Accept messages from trusted origins\n this.#customEventsTrustedOrigins.push(window.location.origin);\n\n const isFromTrustedOrigin = this.#customEventsTrustedOrigins.includes(event.origin);\n const hasValidStructure = event.data && (event.data.type || event.data.eventType) && typeof event.data === 'object';\n\n return isFromTrustedOrigin && hasValidStructure;\n }\n\n #listenToWindowEvents() {\n window.addEventListener('message', (event: MessageEvent) =>\n this.#ngZone.run(() => this.#isValidExternalMessage(event) && this.trigger(event.data.type, event.data.data))\n );\n }\n\n /**\n * Triggers a postMessage event that will be sent to the yuuvis global event Trigger\n * @param type Type/key of the event\n * @param data Data to be sent along with the event\n */\n triggerPostMessageEvent(type: string, data?: any) {\n const targetOrigin = window.location.origin;\n const payload = {\n type,\n data,\n timestamp: Date.now()\n };\n window.postMessage(payload, targetOrigin);\n }\n\n /**\n * Trigger an global event\n * @param type Type/key of the event\n * @param data Data to be send along with the event\n */\n trigger(type: string, data?: any) {\n this.#eventSource.next({ type, data });\n }\n\n /**\n * Listen on a triggered event\n * @param types Type/key of the event\n */\n on(...types: string[]): Observable<YuvEvent> {\n return this.event$.pipe(filter((event) => event && !!types.find((t) => t === event.type)));\n }\n}\n","import { DmsObject } from '../../model/dms-object.model';\n\n/**\n * Events emitted by parts of the application\n */\nexport enum YuvEventType {\n LOGOUT = 'yuv.user.logout',\n CLIENT_LOCALE_CHANGED = 'yuv.user.locale.client.changed',\n DMS_OBJECT_LOADED = 'yuv.dms.object.loaded',\n DMS_OBJECT_CREATED = 'yuv.dms.object.created',\n DMS_OBJECT_DELETED = 'yuv.dms.object.deleted',\n DMS_OBJECT_UPDATED = 'yuv.dms.object.updated',\n DMS_OBJECT_CONTENT_UPDATED = 'yuv.dms.object.content.updated',\n DMS_OBJECTS_MOVED = 'yuv.dms.objects.moved'\n}\n\nexport interface YuvEventDeletedData {\n // ID of the object that has been deleted\n id: string;\n // data of the deleted object\n properties: Record<string, unknown>;\n}\nexport type YuvEventUpdatedData = DmsObject;\nexport type YuvEventCreatedData = string[];\n","import { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, forkJoin, Observable, of } from 'rxjs';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\nimport { UserSettings, YuvUser } from '../../model/yuv-user.model';\nimport { BackendService } from '../backend/backend.service';\nimport { Direction } from '../config/config.interface';\nimport { ConfigService } from '../config/config.service';\nimport { EventService } from '../event/event.service';\nimport { YuvEventType } from '../event/events';\nimport { Logger } from '../logger/logger.service';\nimport { StoredObjectConfig } from '../object-config/object-config.interface';\nimport { AdministrationRoles } from '../system/system.enum';\nimport { UserPermissions, UserPermissionsSection } from '../system/system.interface';\nimport { SystemService } from '../system/system.service';\n\n/**\n * Service providing user account configurations.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class UserService {\n #USERS_SETTINGS = '/users/settings/';\n #DEFAULT_SETTINGS = '/users/settings';\n\n #SETTINGS_SECTION_OBJECTCONFIG = 'object-config';\n\n #user?: YuvUser;\n #userSource = new BehaviorSubject<YuvUser | undefined>(this.#user);\n user$: Observable<YuvUser | undefined> = this.#userSource.asObservable();\n\n globalSettings = new Map();\n userPermissions?: UserPermissions;\n\n /**\n * @ignore\n */\n constructor(\n private backend: BackendService,\n private translate: TranslateService,\n private logger: Logger,\n private system: SystemService,\n private eventService: EventService,\n private config: ConfigService\n ) {}\n\n private getUiDirection(iso: string): string {\n // languages that are read right to left\n const rtlLanguages = ['ar', 'arc', 'dv', 'fa', 'ha', 'he', 'khw', 'ks', 'ku', 'ps', 'ur', 'yi'];\n return rtlLanguages.indexOf(iso) === -1 ? Direction.LTR : Direction.RTL;\n }\n\n /**\n * Set a new current user\n * @param user The user to be set as current user\n */\n public setCurrentUser(user: YuvUser) {\n this.#user = user;\n this.changeClientLocale('', false);\n this.#userSource.next(this.#user);\n }\n\n getCurrentUser(): YuvUser {\n return this.#user!;\n }\n\n get hasAdminRole(): boolean {\n return this.#user?.authorities?.includes(AdministrationRoles.ADMIN) || false;\n }\n\n get hasSystemRole(): boolean {\n return this.#user?.authorities?.includes(AdministrationRoles.SYSTEM) || false;\n }\n\n get hasAdministrationRoles(): boolean {\n return this.hasAdminRole || this.hasSystemRole;\n }\n\n get hasManageSettingsRole(): boolean {\n const customRole = this.config.get('core.permissions.manageSettingsRole');\n const manageSettingsRole = customRole || AdministrationRoles.MANAGE_SETTINGS;\n return this.#user?.authorities?.includes(manageSettingsRole) || false;\n }\n\n get isAdvancedUser(): boolean {\n const customRole = this.config.get('core.permissions.advancedUserRole');\n const advancedUserRole = customRole || AdministrationRoles.MANAGE_SETTINGS;\n return this.#user?.authorities?.includes(advancedUserRole) || false;\n }\n\n get isRetentionManager(): boolean {\n const customRole = this.config.get('core.permissions.retentionManagerRole');\n const retenetionManagerRole = customRole || AdministrationRoles.MANAGE_SETTINGS;\n return this.#user?.authorities?.includes(retenetionManagerRole) || false;\n }\n\n canCreateObjects = false;\n\n /**\n * Change the users client locale\n * @param iso ISO locale string to be set as new client locale\n */\n changeClientLocale(iso: string, persist = true): void {\n if (this.#user) {\n const languages = this.config.getClientLocales().map((lang) => lang.iso);\n iso = iso || this.#user.getClientLocale(this.config.getDefaultClientLocale());\n if (!languages.includes(iso)) {\n iso = this.config.getDefaultClientLocale();\n }\n this.logger.debug(\"Changed client locale to '\" + iso + \"'\");\n this.backend.setHeader('Accept-Language', iso);\n this.#user.uiDirection = this.getUiDirection(iso);\n this.#user.userSettings.locale = iso;\n if (this.translate.currentLang !== iso || this.system.authData?.language !== iso) {\n const ob = persist\n ? forkJoin([\n this.translate.use(iso),\n this.system.updateLocalizations(iso),\n this.saveUserSettings(this.#user.userSettings).pipe(\n tap(() => {\n // this.#userSource.next(this.#user);\n this.logger.debug('Loading system definitions i18n resources for new locale.');\n })\n )\n ])\n : this.translate.use(iso);\n ob.subscribe(() => this.eventService.trigger(YuvEventType.CLIENT_LOCALE_CHANGED, iso));\n }\n }\n }\n\n saveUserSettings(settings: Partial<UserSettings>): Observable<any> {\n if (this.#user) {\n //console.log(this.#user.userSettings);\n\n this.#user.userSettings = { ...this.#user.userSettings, ...settings };\n return this.backend.post(this.#DEFAULT_SETTINGS, this.#user.userSettings).pipe(tap(() => this.#userSource.next(this.#user)));\n } else return of(null);\n }\n\n fetchUserSettings(): Observable<UserSettings> {\n return this.backend.get('/dms/permissions').pipe(\n catchError((e) => of(undefined)),\n switchMap((res) => {\n this.setUserPermissions(res);\n return this.backend.get(this.#DEFAULT_SETTINGS);\n })\n );\n }\n\n private setUserPermissions(res: any): void {\n this.userPermissions = {\n create: this.mapPermissions('CREATE', res),\n write: this.mapPermissions('WRITE', res),\n read: this.mapPermissions('READ', res),\n delete: this.mapPermissions('DELETE', res)\n };\n const sp = {\n createableObjectTypes: [\n ...this.userPermissions.create.folderTypes,\n ...this.userPermissions.create.objectTypes,\n ...this.userPermissions.create.secondaryObjectTypes\n ],\n searchableObjectTypes: [\n ...this.userPermissions.read.folderTypes,\n ...this.userPermissions.read.objectTypes,\n ...this.userPermissions.read.secondaryObjectTypes\n ]\n };\n this.system.setPermissions(sp);\n this.canCreateObjects = sp.createableObjectTypes.length > 0;\n }\n\n private mapPermissions(section: 'CREATE' | 'READ' | 'WRITE' | 'DELETE', apiResponse: any): UserPermissionsSection {\n const res = apiResponse[section] || {};\n return {\n folderTypes: res['folderTypeIds'] || [],\n objectTypes: res['objectTypeIds'] || [],\n secondaryObjectTypes: res['secondaryObjectTypeIds'] || []\n };\n }\n\n /**\n * Search for a user based on a search term\n * @param term Search term\n * @param excludeMe whether or not to exclude myself from the result list\n * @param roles narrow down the search results by certain roles\n */\n queryUser(term: string, excludeMe?: boolean, roles?: string[]): Observable<YuvUser[]> {\n let params = new HttpParams().set('search', term).set('excludeMe', `${!!excludeMe}`);\n roles?.length && roles.map((r) => (params = params.append(`roles`, r)));\n return this.backend.get(`/idm/users?${params}`).pipe(map((users) => (!users ? [] : users.map((u: any) => new YuvUser(u)))));\n }\n\n getUserById(id: string): Observable<YuvUser> {\n return this.backend.get(`/idm/users/${id}`).pipe(map((user) => new YuvUser(user, this.#user!.userSettings)));\n }\n\n logout(redirRoute?: string): void {\n const redir = redirRoute ? `?redir=${redirRoute}` : '';\n (window as any).location.href = `${this.backend.getApiBase('logout')}${redir}`;\n }\n\n getSettings(section: string): Observable<any> {\n return this.#user ? this.backend.get(this.#USERS_SETTINGS + encodeURIComponent(section)) : of(null);\n }\n\n saveObjectConfig(objectConfigs: StoredObjectConfig): Observable<any> {\n return this.backend.post(this.#USERS_SETTINGS + encodeURIComponent(this.#SETTINGS_SECTION_OBJECTCONFIG), objectConfigs);\n }\n\n loadObjectConfig(): Observable<StoredObjectConfig | undefined> {\n return this.getSettings(this.#SETTINGS_SECTION_OBJECTCONFIG).pipe(catchError(() => of(undefined)));\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { SearchService } from '../search/search.service';\nimport { Operator, SearchQuery } from '../search/search.service.interface';\nimport { AuditField, SystemType } from '../system/system.enum';\nimport { UserService } from '../user/user.service';\nimport { AuditQueryOptions, AuditQueryResult } from './audit.interface';\n/**\n * Service providing access to the systems audit entries. Audits can be seen as the history of\n * an object. Actions perormed on an object (eg. read, write, delete, ...) will be recorded during\n * the objects lifecycle. Audits are provided based on a users permissions. Beside the audit entries\n * visible to regular users there are more technical ones that will only be shown to users that\n * have administrative role.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuditService {\n #searchService = inject(SearchService);\n #userService = inject(UserService);\n\n // default number of items to be fetched\n private DEFAULT_RES_SIZE = 20;\n\n // audit action codes that should be visible to regular users\n private userAuditActions: number[] = [\n 100, // metadata created\n 101, // metadata created (with content)\n 110, // tag created\n 201, // content deleted\n 210, // tag deleted\n 300, // metadata updated\n 301, // content updated\n 302, // metadata and content updated\n 303, // content moved\n 310, // tag updated\n 325, // object restored form version\n 340, // object moved\n 10000 // custom audit entries\n ];\n // audit action codes that should be visible to admin users\n private adminAuditActions: number[] = [\n 202, // marked for delete\n 220, // version deleted\n 400, // content read\n 401, // metadata read\n 402, // rendition read (text)\n 403, // rendition read (pdf)\n 404 // rendition read (thumbnail)\n ];\n\n /**\n * Get audit entries of a dms object\n * @param id The id of the object to get the audit entries for\n * @param options Options\n */\n getAuditEntries(id: string, options: AuditQueryOptions = {}): Observable<AuditQueryResult> {\n const auditActions = this.getAuditActions(!!options.allActions, options?.skipActions);\n const q: SearchQuery = {\n size: this.DEFAULT_RES_SIZE,\n types: [SystemType.AUDIT],\n filters: [\n {\n f: AuditField.REFERRED_OBJECT_ID,\n o: Operator.EQUAL,\n v1: id\n },\n {\n f: AuditField.ACTION,\n o: Operator.IN,\n v1: auditActions\n }\n ],\n sort: [\n {\n field: AuditField.CREATION_DATE,\n order: 'desc'\n }\n ]\n };\n return this.#fetchAudits(q);\n }\n\n /**\n * Get an array of action codes that are provided by the service. Based on\n * whether or not the user has admin permissions you'll get a different\n * set of actions.\n * @param skipActions codes of actions that should not be fetched\n */\n getAuditActions(allActions: boolean, skipActions?: number[]): number[] {\n const actions = allActions || this.#userService.isAdvancedUser ? [...this.userAuditActions, ...this.adminAuditActions] : this.userAuditActions;\n return actions.filter((a) => !skipActions || !skipActions.includes(a));\n }\n\n /**\n * Get a certain page for a former audits query.\n * @param auditsResult The result object of a former audits query\n * @param page The page to load\n */\n getPage(auditsResult: AuditQueryResult, page: number) {\n const q = auditsResult.query;\n q.from = (page - 1) * (q.size || this.DEFAULT_RES_SIZE);\n return this.#fetchAudits(q);\n }\n\n #fetchAudits(q: SearchQuery): Observable<AuditQueryResult> {\n return this.#searchService.searchRaw(q).pipe(\n map((res: any) => ({\n query: q,\n items: res.objects.map((o: any) => ({\n action: o.properties[AuditField.ACTION].value,\n actionGroup: this.#getActionGroup(o.properties[AuditField.ACTION].value),\n detail: o.properties[AuditField.DETAIL].value,\n subaction: o.properties[AuditField.SUBACTION] ? o.properties[AuditField.SUBACTION].value : null,\n version: o.properties[AuditField.VERSION].value,\n creationDate: o.properties[AuditField.CREATION_DATE].value,\n createdBy: {\n id: o.properties[AuditField.CREATED_BY].value,\n title: o.properties[AuditField.CREATED_BY].title\n }\n })),\n hasMoreItems: res.hasMoreItems,\n page: !q.from ? 1 : q.from / q.size! + 1\n }))\n );\n }\n\n #getActionGroup(action: number): number {\n try {\n return parseInt(`${action}`.substr(0, 1));\n } catch {\n return -1;\n }\n }\n}\n","/**\n * Result when calling loginDevice endpoint in cloud environment\n * when using device flow\n */\nexport interface LoginDeviceResult {\n user_code: string;\n device_code: string;\n interval: number;\n verification_uri: string;\n expires_in: number;\n}\n/**\n * @ignore\n */\nexport interface StoredToken {\n accessToken: string;\n tenant: string;\n}\n\n/**\n * State emitted by the login function when using the device flow\n */\nexport interface LoginState {\n name: LoginStateName;\n data: any;\n}\n\nexport enum LoginStateName {\n STATE_LOGIN_URI = 'login.uri',\n STATE_DONE = 'login.done',\n STATE_CANCELED = 'login.canceled'\n}\n\nexport interface YuvInitError {\n status: number;\n key: string;\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { CoreConfig } from './core-config';\n\n/**\n * @ignore\n */\nexport const CUSTOM_CONFIG = new InjectionToken<CoreConfig>('CUSTOM_CONFIG', {\n factory: () => ({ main: ['assets/_yuuvis/config/main.json'], translations: ['assets/_yuuvis/i18n/'] })\n});\nexport const CORE_CONFIG = new InjectionToken<CoreConfig>('CORE_CONFIG');\n","import { Inject } from '@angular/core';\nimport { YuvConfig } from './config.interface';\nimport { CUSTOM_CONFIG } from './core-config.tokens';\n\n/**\n * @ignore\n */\nexport class CoreConfig {\n main?: YuvConfig | string[] = ['assets/_yuuvis/config/main.json'];\n translations?: string[] = ['assets/_yuuvis/i18n/'];\n environment?: { production: boolean } = { production: true };\n\n constructor(@Inject(CUSTOM_CONFIG) __config: CoreConfig) {\n Object.assign(this, __config);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable, ReplaySubject, map, tap } from 'rxjs';\nimport { BaseObjectTypeField } from '../system/system.enum';\nimport { GenericObjectType, ObjectTypeField, VirtualObjectType } from '../system/system.interface';\nimport { SystemService } from '../system/system.service';\nimport { UserService } from '../user/user.service';\nimport {\n ObjectConfig,\n ObjectConfigBucket,\n ObjectConfigProperty,\n ObjectConfigRecord,\n ResolvedObjectConfig,\n StoredObjectConfig\n} from './object-config.interface';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n/**\n * Service managing the configuarions for object types.\n * Configuration means that you can pick certain fields\n * of an object type and assign them to a config object.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ObjectConfigService {\n #system = inject(SystemService);\n #user = inject(UserService);\n\n OBJECT_CONFIG_STORAGE_KEY = 'yuv.framework.object-config';\n #objectConfigsSource = new ReplaySubject<StoredObjectConfig>();\n #objectConfigs$: Observable<StoredObjectConfig> = this.#objectConfigsSource.asObservable();\n\n #defaultObjectConfigs: Record<string, ObjectConfig> = {};\n\n #registeredDefaultObjectConfigs: StoredObjectConfig = {\n main: {},\n buckets: []\n };\n\n #objectConfigs: StoredObjectConfig = {\n main: {},\n buckets: []\n };\n\n #isValidObjectConfig(soc: StoredObjectConfig | undefined): boolean {\n return coerceBooleanProperty(soc && Object.hasOwn(soc, 'main') && Object.hasOwn(soc, 'buckets'));\n }\n\n // called on core init (auth.service -> initApp)\n init(): Observable<any> {\n return this.#user.loadObjectConfig().pipe(\n tap((res) => {\n this.#getDefaultObjectConfig();\n this.#objectConfigs = (this.#isValidObjectConfig(res) && res) || {\n main: {},\n buckets: []\n };\n\n this.#objectConfigsSource.next(this.#objectConfigs);\n })\n );\n }\n\n getObjectConfigs$(bucket?: string, includeDefaults?: boolean): Observable<ObjectConfigRecord> {\n return this.#objectConfigs$.pipe(\n map((soc: StoredObjectConfig) => {\n let ocr: ObjectConfigRecord = soc.main;\n const defaults: ObjectConfigRecord = { ...this.#defaultObjectConfigs, ...this.#getRegisteredDefaults(bucket) };\n\n if (bucket) {\n const tileBucket: ObjectConfigBucket | undefined = soc.buckets.find((b) => b.id === bucket);\n if (tileBucket) {\n ocr = tileBucket.configs;\n if (includeDefaults)\n Object.keys(ocr).forEach((k) => {\n ocr[k] = { ...defaults[k], ...ocr[k] };\n });\n }\n }\n return includeDefaults ? { ...defaults, ...ocr } : { ...ocr };\n })\n );\n }\n\n /**\n * Register default object configs. Apps can pre-define how their\n * objects should be rendered.\n * @param bucket Name of a bucket to bind configs to (usually the ID of the app) to\n * separate the configs from other apps. If not provided configs will be saved for\n * the global scope\n */\n registerDefaults(configs: ObjectConfigRecord, bucket?: string) {\n if (bucket) {\n // does bucket exist?\n const tileBucketIdx: number = this.#registeredDefaultObjectConfigs.buckets.findIndex((b) => b.id === bucket);\n if (tileBucketIdx !== -1) {\n this.#registeredDefaultObjectConfigs.buckets[tileBucketIdx].configs = {\n ...this.#registeredDefaultObjectConfigs.buckets[tileBucketIdx].configs,\n ...configs\n };\n } else {\n this.#registeredDefaultObjectConfigs.buckets.push({\n id: bucket,\n configs\n });\n }\n } else {\n this.#registeredDefaultObjectConfigs.main = { ...this.#registeredDefaultObjectConfigs.main, ...configs };\n }\n }\n\n unregisterDefaults(configs: ObjectConfigRecord, bucket?: string) {\n if (bucket) {\n // does bucket exist?\n const tileBucketIdx: number = this.#registeredDefaultObjectConfigs.buckets.findIndex((b) => b.id === bucket);\n if (tileBucketIdx !== -1) {\n this.#registeredDefaultObjectConfigs.buckets.splice(tileBucketIdx, 1);\n }\n } else {\n Object.keys(configs).forEach((key) => {\n delete this.#registeredDefaultObjectConfigs.main[key];\n });\n }\n }\n\n getRegisteredDefault(objectTypeId: string, bucket?: string): ObjectConfig | undefined {\n if (bucket) {\n const b = this.#registeredDefaultObjectConfigs.buckets.find((b) => b.id === bucket);\n return b ? b.configs[objectTypeId] : undefined;\n } else {\n return this.#registeredDefaultObjectConfigs.main[objectTypeId];\n }\n }\n\n #getRegisteredDefaults(bucket?: string): ObjectConfigRecord {\n if (bucket) {\n const defaultTileBucket: ObjectConfigBucket | undefined = this.#registeredDefaultObjectConfigs.buckets.find((b) => b.id === bucket);\n return defaultTileBucket?.configs || {};\n } else return this.#registeredDefaultObjectConfigs.main;\n }\n\n /**\n * Get object config for an object type.\n * @param objectTypeId ID of the object type to get the config for\n * @param bucket Optional bucket ID to fetch the config from. Buckets\n * define separated areas to store/receive those configs. This way\n * components/apps can store different object configs than the ones\n * used accross the whole client application.\n */\n getObjectConfig(type: VirtualObjectType, bucket?: string): ObjectConfig {\n const b: ObjectConfigBucket | undefined = bucket ? this.#objectConfigs.buckets.find((b) => b.id === bucket) : undefined;\n const otr: ObjectConfigRecord = b ? b.configs : this.#objectConfigs.main;\n\n const oc = otr[type.id];\n\n // return oc || this.#getRegisteredDefaults(bucket)[type.id];\n\n // override icons by APP_SCHEMA-icons: temporary solution. Todo: remove when handling of custom svg-icons is clear!\n const result = oc || this.#getRegisteredDefaults(bucket)[type.id] || this.#defaultObjectConfigs[type.id];\n if (result?.icon) result.icon = type.icon ? { svg: type.icon } : result.icon;\n return result;\n }\n\n saveObjectConfig(type: VirtualObjectType, config?: ObjectConfig, bucket?: string): Observable<any> {\n return this.saveObjectConfigs({ [type.id]: config }, bucket);\n }\n\n saveObjectConfigs(configs: Record<string, ObjectConfig | undefined>, bucket?: string): Observable<any> {\n this.#updateObjectConfig(configs, bucket);\n return this.#user.saveObjectConfig(this.#objectConfigs);\n }\n\n #updateObjectConfig(configs: Record<string, ObjectConfig | undefined>, bucket?: string) {\n if (!this.#objectConfigs) {\n this.#objectConfigs = {\n main: {},\n buckets: []\n };\n }\n if (bucket) {\n // does bucket exist?\n const tileBucketIdx: number = this.#objectConfigs.buckets.findIndex((b) => b.id === bucket);\n if (tileBucketIdx !== -1) {\n Object.keys(configs).forEach((objectTypeId) => {\n const config = configs[objectTypeId];\n if (config) {\n this.#objectConfigs.buckets[tileBucketIdx].configs[objectTypeId] = config;\n } else {\n delete this.#objectConfigs.buckets[tileBucketIdx].configs[objectTypeId];\n }\n });\n } else {\n const newBucket: ObjectConfigBucket = { id: bucket, configs: {}};\n Object.keys(configs).forEach((objectTypeId) => {\n const config = configs[objectTypeId];\n if (config) {\n newBucket.configs[objectTypeId] = config;\n }\n });\n \n this.#objectConfigs.buckets.push(newBucket);\n }\n } else {\n Object.keys(configs).forEach((objectTypeId) => {\n const config = configs[objectTypeId];\n if (config) {\n this.#objectConfigs.main[objectTypeId] = config;\n } else {\n delete this.#objectConfigs.main[objectTypeId];\n }\n });\n }\n this.#objectConfigsSource.next(this.#objectConfigs);\n }\n\n getDefaultConfig(objectTypeID: string): ObjectConfig {\n return this.#defaultObjectConfigs[objectTypeID];\n }\n\n getResolvedObjectConfig(data: Record<string, any>, type: VirtualObjectType, bucket?: string, includeDefaults?: boolean): ResolvedObjectConfig {\n const defaultCfg = this.#defaultObjectConfigs[data[BaseObjectTypeField.OBJECT_TYPE_ID]];\n let oc = this.getObjectConfig(type, bucket) || defaultCfg;\n if (includeDefaults) oc = { ...defaultCfg, ...oc };\n const res: Partial<ResolvedObjectConfig> = {\n id: data[BaseObjectTypeField.OBJECT_ID],\n objectTypeId: data[BaseObjectTypeField.OBJECT_TYPE_ID],\n actions: oc.actions,\n badges: oc.badges,\n instanceData: data\n };\n\n if (oc.title)\n res.title = {\n propertyName: oc.title.propertyName,\n value: data[oc.title.propertyName]\n };\n if (oc.description)\n res.description = {\n propertyName: oc.description.propertyName,\n value: data[oc.description.propertyName]\n };\n if (oc.icon)\n res.icon = {\n propertyName: 'custom',\n value: oc.icon.svg\n };\n if (oc.meta)\n res.meta = {\n propertyName: oc.meta.propertyName,\n value: data[oc.meta.propertyName]\n };\n if (oc.aside)\n res.aside = {\n propertyName: oc.aside.propertyName,\n value: data[oc.aside.propertyName]\n };\n\n return res as ResolvedObjectConfig;\n }\n\n /**\n * Load default/fallbac configs based on the object types and\n * their first properties\n */\n #getDefaultObjectConfig(): void {\n this.#system.getObjectTypes(true).forEach((ot: GenericObjectType) => {\n this.#defaultObjectConfigs[ot.id] = {\n objectTypeId: ot.id,\n title: this.#toObjectProperty(ot.fields[0]),\n description: this.#toObjectProperty(ot.fields[1]),\n meta: this.#toObjectProperty(ot.fields[2]),\n aside: this.#toObjectProperty(ot.fields[3])\n };\n });\n }\n\n #toObjectProperty(field: ObjectTypeField): ObjectConfigProperty | undefined {\n return field\n ? {\n label: this.#system.getLocalizedLabel(field.id),\n propertyName: field.id\n }\n : undefined;\n }\n}\n","import { InjectionToken, Provider } from \"@angular/core\";\nimport { YuvUser } from \"../../model/yuv-user.model\";\n\nexport const YUV_USER = new InjectionToken<YuvUser | undefined>('Currently logged in user', {\n factory: () => undefined\n });\n \n export const provideUser = (user: YuvUser): Provider => {\n return { provide: YUV_USER, useValue: user };\n };","import { inject, Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { map, switchMap, tap } from 'rxjs/operators';\nimport { UserSettings, YuvUser } from '../../model/yuv-user.model';\nimport { Utils } from '../../util/utils';\nimport { BackendService } from '../backend/backend.service';\nimport { AppCacheService } from '../cache/app-cache.service';\nimport { CoreConfig } from '../config/core-config';\nimport { CORE_CONFIG } from '../config/core-config.tokens';\nimport { EventService } from '../event/event.service';\nimport { YuvEventType } from '../event/events';\nimport { SystemService } from '../system/system.service';\nimport { UserService } from '../user/user.service';\nimport { YuvInitError } from './auth.interface';\nimport { ObjectConfigService } from '../object-config/object-config.service';\nimport { YUV_USER } from '../user/user.providers';\n\n/**\n * Service handling authentication related issues.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthService {\n // user may have been fetched already in bootstrapping process\n #userToken = inject<YuvUser>(YUV_USER);\n #eventService = inject(EventService);\n #userService = inject(UserService);\n #objectConfigService = inject(ObjectConfigService);\n #appCache = inject(AppCacheService);\n #systemService = inject(SystemService);\n #backend = inject(BackendService);\n\n #INITAL_REQUEST_STORAGE_KEY = 'yuv.core.auth.initialrequest';\n readonly USER_FETCH_URI = '/idm/whoami';\n\n #authenticated = false;\n #authSource = new BehaviorSubject<boolean>(false);\n authenticated$: Observable<boolean> = this.#authSource.asObservable();\n\n #authData!: AuthData;\n // set by core-init\n initError?: YuvInitError;\n\n constructor(@Inject(CORE_CONFIG) public coreConfig: CoreConfig) {}\n\n isLoggedIn() {\n return this.#authenticated;\n }\n\n /**\n * Called while app/core is initialized (APP_INITIALIZER)\n * @ignore\n */\n initUser() {\n return this.fetchUser();\n }\n\n /**\n * Get the current tenant or the previous one persisted locally\n */\n getTenant(): string {\n return this.#authData?.tenant;\n }\n\n /**\n * Fetch information about the user currently logged in\n */\n fetchUser(): Observable<YuvUser> {\n return (this.#userToken ? of(this.#userToken) : this.#backend.get(this.USER_FETCH_URI)).pipe(\n tap(() => {\n this.#authenticated = true;\n this.#authSource.next(this.#authenticated);\n }),\n switchMap((userJson: any) => this.#initApp(userJson))\n );\n }\n\n /**\n * Logs out the current user.\n */\n logout() {\n this.#authenticated = false;\n this.#authSource.next(this.#authenticated);\n this.#eventService.trigger(YuvEventType.LOGOUT);\n }\n\n /**\n * Persists the initial request URI. This is nessesary to be able to\n * redirect the user to the requested page after authentication.\n * This is done on app initialization (core-init).\n */\n setInitialRequestUri() {\n const ignore = ['/', '/index.html'];\n let uri = `${location.pathname}${location.search}`.replace(Utils.getBaseHref(), '');\n uri = !uri.startsWith('/') ? `/${uri}` : uri;\n\n if (!ignore.includes(uri)) {\n this.#appCache\n .setItem(this.#INITAL_REQUEST_STORAGE_KEY, {\n uri: uri,\n timestamp: Date.now()\n })\n .subscribe();\n }\n }\n\n /**\n * Get the URL that entered the app. May be a deep link that could then be\n * picked up again after user has been authenticated.\n */\n getInitialRequestUri(): Observable<{ uri: string; timestamp: number }> {\n return this.#appCache.getItem(this.#INITAL_REQUEST_STORAGE_KEY);\n }\n\n resetInitialRequestUri(): Observable<any> {\n return this.#appCache.removeItem(this.#INITAL_REQUEST_STORAGE_KEY);\n }\n\n /**\n * Initialize/setup the application for a given user. This involves fetching\n * settings and schema information.\n * @param userJson Data retrieved from the backend\n */\n #initApp(userJson: any): Observable<YuvUser> {\n return this.#userService.fetchUserSettings().pipe(\n switchMap((userSettings: UserSettings) => {\n const currentUser = new YuvUser(userJson, userSettings);\n this.#userService.setCurrentUser(currentUser);\n this.#authData = {\n tenant: currentUser.tenant,\n language: currentUser.getClientLocale()\n };\n return this.#systemService.getSystemDefinition(this.#authData).pipe(\n switchMap(() => this.#objectConfigService.init()),\n map(() => currentUser)\n );\n })\n );\n }\n}\n\nexport interface AuthData {\n tenant: string;\n language: string;\n}\n","\nexport const ProcessAction = {\n complete: 'complete',\n claim: 'claim',\n delegate: 'delegate',\n resolve: 'resolve',\n save: 'save'\n};\n\nexport interface Process {\n id: string;\n // objects (IDs) attached to the process\n attachments: string[];\n businessKey: string; //\n deleteReason: string;\n durationInMillis: number; //\n endActivityId: string;\n endTime: Date;\n initiator: ProcessUser;\n name: string;\n processDefinition: { description: string; id: string; idPrefix: string; name: string };\n startActivityId: string;\n startTime: Date;\n startUserId: string;\n // subject: string;\n suspended?: boolean;\n variables: ProcessVariable[]; // tenant admin only\n}\n\n\n// payload for starting a new process\nexport interface ProcessCreatePayload extends ProcessPostPayload {\n processDefinitionKey: string;\n name?: string;\n businessKey?: string;\n returnVariables?: boolean;\n}\n\n// payload for post requests to the bpm backend\nexport interface ProcessPostPayload {\n variables?: ProcessVariable[];\n attachments?: string[];\n subject?: string;\n}\n\nexport interface ProcessVariable {\n name: string;\n type?: string;\n value: any;\n // TODO: Not yet supported by BPM-Engine\n readonly?: boolean;\n scope?: string;\n}\n\n/**\n * Tasks are basically activities defined by a process.\n * Processes may contain several tasks.\n */\nexport interface InboxTask {\n id: string;\n // ID of the process instance that contains this task/activity\n processInstanceId: string;\n assignee: ProcessUser;\n claimTime: Date;\n createTime: Date;\n dueDate: Date;\n description: string;\n // taskMessages?: TaskMessage[];\n // taskForm?: {\n // schemaProperties?: string[];\n // model?: any;\n // data?: any;\n // outcomes?: TaskOutcome[];\n // };\n delegationState?: string;\n formKey: string;\n initiator: ProcessUser;\n name: string;\n owner: ProcessUser;\n parentTaskId: string;\n processDefinition: {\n id: string;\n idPrefix: string;\n };\n subject: string;\n suspended: false;\n variables: ProcessVariable[];\n resolvedValues?: { [id: string]: string };\n attachments: string[];\n }\n\n export interface ProcessUser {\n id: string;\n title: string;\n }\n\n export interface FetchTaskOptions {\n businessKey?: string;\n includeProcessVar?: boolean;\n isCompleted?: boolean;\n processDefinitionKey?: string;\n }","import { inject, Injectable } from '@angular/core';\nimport { BackendService } from '../backend/backend.service';\nimport { FetchTaskOptions, Process, ProcessAction, ProcessCreatePayload, ProcessPostPayload } from './bpm.interface';\nimport { map, Observable, of } from 'rxjs';\nimport { ApiBase } from '../backend/api.enum';\nimport { Utils } from '../../util/utils';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BpmService {\n #backend = inject(BackendService);\n\n startProcess(payload: ProcessCreatePayload): Observable<any> {\n return this.#backend.post('/bpm/processes', payload, ApiBase.apiWeb);\n }\n\n /**\n * Finsihes a task.\n * @param taskId ID of the taks to finish\n * @param payload Data to be send with the complete request (may contain attachments, a new subject or variables)\n */\n completeTask(taskId: string, payload?: ProcessPostPayload): Observable<any> {\n return this.#putTask(taskId, ProcessAction.complete, payload || {});\n }\n\n updateTask(taskId: string, payload?: ProcessPostPayload): Observable<any> {\n return this.#putTask(taskId, ProcessAction.save, payload || {});\n }\n\n //TODO: replace with propper service call\n getProcessPoll(): Observable<any> {\n const random = Math.random();\n console.log('getProcessPoll: ', { random });\n\n return of([{ title: `task title ${random}`, duedate: new Date() }]);\n }\n\n getProcessInstance(processDefinitionKey: string, options?: FetchTaskOptions): Observable<Process> {\n return this.#backend\n .get(`/bpm/processes${Utils.optionsToURLParams({ ...options, processDefinitionKey })}`, ApiBase.apiWeb)\n .pipe(map(({ objects }) => objects[0]));\n }\n\n deleteProcess(processInstanceId: string): Observable<any> {\n return this.#backend.delete(`/bpm/processes/${processInstanceId}`, ApiBase.apiWeb);\n }\n\n #putTask(taskId: string, action: string, payload: ProcessPostPayload): Observable<any> {\n const pl = { ...payload, action: action };\n return this.#backend.put(`/bpm/tasks/${taskId}`, pl, ApiBase.apiWeb);\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CatalogService {\n // TODO: Implement when clarified\n // constructor(private backend: BackendService, private userService: UserService) {}\n\n // private userHasScopePermissions(scope: 'admin' | 'system'): boolean {\n // if (scope === 'admin') {\n // return this.userService.hasAdminRole;\n // } else if (scope === 'system') {\n // return this.userService.hasSystemRole;\n // } else {\n // return false;\n // }\n // }\n\n // /**\n // * Loads a catalog from the backend.\n // * @param qname The catalogs qualified name\n // * @param scope The scope to load the catalog from. This decides which controler\n // * will be used to fetch the catalog. Possibe values: 'admin' or 'system'.\n // * Setting a scope will also check for the users permission to use this scope.\n // */\n // getCatalog(qname: string, scope?: 'admin' | 'system'): Observable<Catalog> {\n // const ctrl = scope && this.userHasScopePermissions(scope) ? scope : 'dms';\n // return this.backend.get(`/${ctrl}/catalogs/${qname}`).pipe(\n // catchError((e) => {\n // if (e.status === 404) {\n // return of({ entries: [] });\n // } else {\n // throw e;\n // }\n // }),\n // map((res: { tenant?: string; entries: CatalogEntry[]; readonly: boolean }) => ({\n // qname: qname,\n // entries: res.entries,\n // tenant: res.tenant,\n // readonly: res.readonly\n // }))\n // );\n // }\n\n // getCustomCatalog(uri: string): Observable<BaseCatalog> {\n // return this.backend.get(uri, ApiBase.none).pipe(\n // catchError((e) => {\n // if (e.status === 404) {\n // return of({ entries: [] });\n // } else {\n // throw e;\n // }\n // }),\n // map((res: { entries: CatalogEntry[]; readonly: boolean }) => ({\n // entries: res.entries,\n // readonly: res.readonly\n // }))\n // );\n // }\n\n // /**\n // * Updates an existing catalog.\n // * @param name The catalogs name\n // * @param patches A collection of JSON-Pathes. See http://jsonpatch.com/ for details\n // * @param namespace Optional namespace\n // */\n // patch(qname: string, patches: any[]): Observable<Catalog> {\n // this.backend.setHeader('Content-Type', 'application/json-patch+json');\n // return this.backend.patch(`/dms/catalogs/${qname}`, patches).pipe(\n // map((res: Catalog) => ({\n // qname: qname,\n // entries: res.entries,\n // tenant: res.tenant\n // })),\n // tap((catalog: Catalog) => {\n // this.backend.setHeader('Content-Type', 'application/json');\n // })\n // );\n // }\n\n // /**\n // * Saves a whole catalog. This will overwrite the existing catalog with the entries\n // * provided or create a new catalog.\n // * @param catalog The catalog to be saved\n // * @param scope The scope to be used. This decides which controller\n // * will be used to post data to. Possibe values: 'admin' or 'system'.\n // * Setting a scope will also check for the users permission to use this scope.\n // */\n // post(catalog: Catalog, scope?: 'admin' | 'system'): Observable<Catalog> {\n // const ctrl = scope && this.userHasScopePermissions(scope) ? scope : 'dms';\n // return this.backend\n // .post(`/${ctrl}/catalogs/${catalog.qname}`, {\n // entries: catalog.entries\n // })\n // .pipe(\n // map(() => {\n // catalog.tenant = this.userService.getCurrentUser().tenant;\n // return catalog;\n // })\n // );\n // }\n\n // /**\n // * Checks whether or not particular entries of a catalog are in use.\n // * @param qname The catalogs qualified name\n // * @param values The entries to be checked\n // * @returns An array of entries that are in use\n // */\n // inUse(qname: string, values: string[]): Observable<string[]> {\n // const queryParams = values.map((v) => `entries=${encodeURIComponent(v)}`);\n // return this.backend.get(`/dms/catalogs/${qname}/validate?${queryParams.join('&')}`);\n // }\n}\n","import { Injectable, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { filter, fromEvent, map, merge, Observable, ReplaySubject } from 'rxjs';\nimport { DmsObject } from '../../model/dms-object.model';\nimport { ClipboardData, ClipboardDataMode, ClipboardStore } from './clipboard.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ClipboardService {\n #emptyClipboard: ClipboardStore = {\n buckets: undefined,\n main: undefined\n };\n\n #clipboard: ClipboardStore = structuredClone(this.#emptyClipboard);\n #clipboardSource = new ReplaySubject<ClipboardStore>();\n #clipboard$ = this.#clipboardSource.asObservable();\n\n #pasteEvents = merge(\n fromEvent<KeyboardEvent>(window, 'keydown').pipe(filter((event: KeyboardEvent) => event.ctrlKey && event.code === 'KeyV')),\n fromEvent<ClipboardEvent>(window, 'paste').pipe(filter((event: ClipboardEvent) => !!event.clipboardData && event.clipboardData.files.length > 0))\n );\n\n clipboard(bucket?: string): Signal<ClipboardData | undefined> {\n return toSignal(this.clipboard$(bucket));\n }\n\n clipboard$(bucket?: string): Observable<ClipboardData | undefined> {\n return this.#clipboard$.pipe(\n map((cs: ClipboardStore) => {\n if (bucket) {\n return cs.buckets ? cs.buckets[bucket] : undefined;\n } else return cs.main;\n })\n );\n }\n\n paste$(bucket?: string): Observable<ClipboardData> {\n return this.#pasteEvents.pipe(\n map((e: KeyboardEvent | ClipboardEvent) => {\n let cd: ClipboardData | undefined;\n if (e instanceof ClipboardEvent) {\n const fileList: FileList = e.clipboardData!.files;\n const files: File[] = [];\n for (let i = 0; i < fileList.length; i++) {\n files.push(fileList.item(i) as File);\n }\n\n cd = files.length\n ? {\n files\n }\n : undefined;\n } else {\n cd = bucket ? (this.#clipboard.buckets ? this.#clipboard.buckets[bucket] : undefined) : this.#clipboard.main;\n }\n return cd;\n }),\n filter((cd: any) => cd !== undefined && (cd.files || cd.objects)),\n map((cd: ClipboardData) => cd)\n );\n }\n\n getClipboardData(bucket?: string): ClipboardData | undefined {\n if (bucket) {\n return this.#clipboard.buckets ? this.#clipboard.buckets[bucket] : undefined;\n } else return this.#clipboard.main;\n }\n\n /**\n * Add objects to the clipboard\n * @param bucket Buckets are ways to separate data from the global scope.\n * If you have an app that would like to have a separate section in the clipboard\n * you'll use a unique bucket to store your stuff. When observing chages to the\n * clipboard you couls as well provide the bucket and you will only get\n */\n addObjects(objects: DmsObject[], mode: ClipboardDataMode, bucket?: string) {\n const cd: ClipboardData = { mode, objects };\n if (bucket) {\n if (!this.#clipboard.buckets) this.#clipboard.buckets = {};\n this.#clipboard.buckets[bucket] = cd;\n } else this.#clipboard.main = cd;\n this.#clipboardSource.next(this.#clipboard);\n }\n\n clear(bucket?: string) {\n if (bucket && this.#clipboard.buckets) {\n delete this.#clipboard.buckets[bucket];\n } else {\n this.#clipboard = structuredClone(this.#emptyClipboard);\n }\n this.#clipboardSource.next(this.#clipboard);\n }\n\n async addToNavigatorClipBoard(data: string) {\n try {\n await navigator.clipboard.writeText(data);\n //console.log('Text copied to clipboard');\n } catch (error) {\n console.error('Failed to copy text: ', error);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { fromEvent, Observable, ReplaySubject } from 'rxjs';\n\n/**\n * Service to monitor the online/offline state of the application. \n * It listens to the browser's online and offline events and provides an observable\n * to track the current connection state.\n * \n * An observable `connection$` is provided which emits the current connection state\n * whenever the online or offline state changes. The initial state is determined by\n * the `window.navigator.onLine` property.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ConnectionService {\n private currentState: ConnectionState = {\n isOnline: window.navigator.onLine\n };\n private connectionStateSource = new ReplaySubject<ConnectionState>();\n public connection$: Observable<ConnectionState> = this.connectionStateSource.asObservable();\n /**\n * @ignore\n */\n constructor() {\n this.connectionStateSource.next(this.currentState);\n fromEvent(window, 'online').subscribe(() => {\n this.currentState.isOnline = true;\n this.connectionStateSource.next(this.currentState);\n });\n\n fromEvent(window, 'offline').subscribe(() => {\n this.currentState.isOnline = false;\n this.connectionStateSource.next(this.currentState);\n });\n }\n}\n/**\n * Check a connection state of a client\n */\nexport interface ConnectionState {\n /**\n * whether or not the application is online.\n */\n isOnline: boolean;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { forkJoin, of } from 'rxjs';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\nimport { Utils } from '../../util/utils';\nimport { AuthService } from '../auth/auth.service';\nimport { YuvConfig } from '../config/config.interface';\nimport { ConfigService } from '../config/config.service';\nimport { CORE_CONFIG } from '../config/core-config.tokens';\nimport { Logger } from '../logger/logger.service';\n\n/**\n * Providing functions,that are are injected at application startup and executed during app initialization.\n */\nexport const init_moduleFnc = () => {\n const coreConfig = inject(CORE_CONFIG);\n const logger = inject(Logger);\n const http = inject(HttpClient);\n const configService = inject(ConfigService);\n const authService = inject(AuthService);\n authService.setInitialRequestUri();\n return coreConfig.main\n ? !Array.isArray(coreConfig.main)\n ? of([coreConfig.main])\n : forkJoin(\n [...(coreConfig.main as string[])].map((uri: string) =>\n http.get(`${Utils.getBaseHref()}${uri}`).pipe(\n catchError((e: any) => {\n logger.error('failed to catch config file', e);\n return of({});\n }),\n map((res: any) => res as YuvConfig)\n )\n )\n ).pipe(\n // switchMap((configs: YuvConfig[]) => configService.extendConfig(configs)),\n tap((configs: YuvConfig[]) => configService.extendConfig(configs)),\n switchMap(() =>\n authService.initUser().pipe(\n catchError((e) => {\n authService.initError = {\n status: e.status,\n key: e.error.error\n };\n return of(true);\n })\n )\n )\n )\n : of(false);\n};\n","export enum DeviceScreenOrientation {\n PORTRAIT = 'portrait',\n LANDSCAPE = 'landscape'\n}\n\n\nexport interface DeviceScreen {\n size: ScreenSize;\n orientation: DeviceScreenOrientation\n width: number;\n height: number;\n}\n\nexport interface DeviceScreenBounds {\n width: number;\n height: number;\n}\n\nexport type ScreenSize = 's' | 'm' | 'l' | 'xl';\n\n\n","import { inject, Injectable, signal } from '@angular/core';\nimport { DeviceDetectorService, DeviceInfo } from 'ngx-device-detector';\nimport { debounceTime, fromEvent, Observable, ReplaySubject } from 'rxjs';\nimport { DeviceScreen, DeviceScreenBounds, DeviceScreenOrientation, ScreenSize } from './device.interface';\n/**\n * @deprecated This service is deprecated. Please use the DeviceService from the `@yuuvis/material` package instead.\n *\n * This service is used to adapt styles and designs of the client to\n * different devices and screen sizes.\n *\n * Using `screenChange$` observable you are able to monitor changes to\n * the screen size and act upon it.\n *\n * This service will also adds attributes to the body tag that reflect the\n * current screen/device state. This way you can apply secific styles in your\n * css files for different screen resolutions and orientations.\n *\n * Attributes applied to the body tag are:\n *\n * - `data-screen` - [s, m, l, xl] - for different screen sizes\n * (s: for mobile phone like screen sizes, m: for tablet like screen\n * sizes, 'l': for desktop like screen sizes, 'xl': for screen sizes exceeding\n * the desktop screen size).\n *\n * - `data-orientation` - [portrait, landscape] - for the current screen orientation\n *\n * - `data-touch-enabled` - [true] - if the device has touch capabilities (won't be added if the device doesn't have touch capabilities)\n *\n * ```html\n * <body data-screen-size=\"s\" data-screen-orientation=\"portrait\" data-touch-enabled=\"true\">\n * ...\n * </body>\n * ```\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceService {\n #deviceDetectorService = inject(DeviceDetectorService);\n\n #upperScreenBoundary = {\n small: 600,\n mediumPortrait: 900,\n mediumLandscape: 1200,\n large: 1800\n };\n\n #resize$ = fromEvent(window, 'resize').pipe(debounceTime(this.#getDebounceTime()));\n #screen?: DeviceScreen;\n #screenSource = new ReplaySubject<DeviceScreen>(1);\n screenChange$: Observable<DeviceScreen> = this.#screenSource.asObservable();\n\n /**\n * Signal to indicate if the screen size is small (e.g. mobile phone).\n * This will only be triggered if `supportsSmallScreens` is set to true.\n * Major components will use this metric to adapt to 'small screen behavior' and so can you\n */\n smallScreenLayout = signal<boolean>(false);\n #supportsSmallScreens = signal<boolean>(false);\n\n /**\n * if the device is a mobile device (android / iPhone / windows-phone etc)\n */\n isMobile: boolean = this.#deviceDetectorService.isMobile();\n /**\n * if the device us a tablet (iPad etc)\n */\n isTablet: boolean = this.#deviceDetectorService.isTablet();\n /**\n * if the app is running on a Desktop browser\n */\n isDesktop: boolean = this.#deviceDetectorService.isDesktop();\n info?: DeviceInfo = this.#deviceDetectorService.getDeviceInfo();\n isTouchEnabled = this.#isTouchEnabled();\n\n constructor() {\n this.#resize$.subscribe((e: Event) => {\n this.#setScreen();\n });\n }\n\n init(supportsSmallScreens: boolean = false): void {\n this.#supportsSmallScreens.set(supportsSmallScreens);\n this.#setScreen();\n }\n\n #isTouchEnabled() {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n }\n\n #setScreen(): void {\n const bounds: DeviceScreenBounds = {\n width: window.innerWidth,\n height: window.innerHeight\n };\n let orientation: DeviceScreenOrientation = bounds.width >= bounds.height ? DeviceScreenOrientation.LANDSCAPE : DeviceScreenOrientation.PORTRAIT;\n\n if (this.isMobile && window.screen['orientation']) {\n const screenOrientation = window.screen['orientation'].type;\n if (screenOrientation === 'landscape-primary' || screenOrientation === 'landscape-secondary') {\n orientation = DeviceScreenOrientation.LANDSCAPE;\n } else if (screenOrientation === 'portrait-primary' || screenOrientation === 'portrait-secondary') {\n orientation = DeviceScreenOrientation.PORTRAIT;\n }\n }\n this.#screen = {\n size: this.#getScreenSize(bounds, orientation),\n orientation,\n width: bounds.width,\n height: bounds.height\n };\n this.#screenSource.next(this.#screen);\n this.smallScreenLayout.set(this.#supportsSmallScreens() && this.#screen.size === 's' && this.#screen.orientation === 'portrait');\n this.#setupDOM(this.#screen);\n // force change detection because resize will not be recognized by Angular in some cases\n // TODO: check: causes recursive ticks in some cases ...\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n setTimeout(() => {}, 0);\n }\n\n #setupDOM(screen: DeviceScreen) {\n const body: HTMLBodyElement = document.querySelector('body') as HTMLBodyElement;\n body.setAttribute('data-screen-size', screen.size);\n body.setAttribute('data-screen-orientation', screen.orientation);\n if (this.isTouchEnabled) body.setAttribute('data-touch-enabled', 'true');\n else body.removeAttribute('data-touch-enabled');\n }\n\n #getScreenSize(bounds: DeviceScreenBounds, orientation: DeviceScreenOrientation): ScreenSize {\n if (this.#isBelow(this.#upperScreenBoundary.small, bounds)) {\n return 's';\n } else if (this.#isBelow(orientation === 'landscape' ? this.#upperScreenBoundary.mediumLandscape : this.#upperScreenBoundary.mediumPortrait, bounds)) {\n return 'm';\n } else if (this.#isBelow(this.#upperScreenBoundary.large, bounds)) {\n return 'l';\n } else {\n return 'xl';\n }\n }\n\n #isBelow(size: number, bounds: DeviceScreenBounds): boolean {\n const landscape = bounds.width < this.#upperScreenBoundary.large ? bounds.width >= bounds.height : false;\n return (landscape && bounds.height < size) || (!landscape && bounds.width < size);\n }\n\n #getDebounceTime() {\n // on mobile devices resize only happens when rotating the device or when\n // keyboard appears, so we dont't need to debounce\n return this.isMobile ? 0 : 500;\n }\n}\n","import { HttpClient, HttpErrorResponse, HttpEvent, HttpEventType, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, ReplaySubject, Subject, throwError } from 'rxjs';\nimport { catchError, filter, map, scan, tap } from 'rxjs/operators';\nimport { Utils } from '../../util/utils';\nimport { BackendService } from '../backend/backend.service';\nimport { Logger } from '../logger/logger.service';\nimport { BaseObjectTypeField } from '../system/system.enum';\nimport { CreatedObject, ProgressStatus, UploadResult } from './upload.interface';\n\nconst transformResponse = () => map((res: CreatedObject) => (res && res.body ? res.body.objects.map((val) => val) : null));\n\n/**\n * Service for providing upload of different object types into a client.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class UploadService {\n readonly #backend = inject(BackendService);\n readonly #http = inject(HttpClient);\n readonly #logger = inject(Logger);\n\n #status: ProgressStatus = { err: 0, items: [] };\n #statusSource = new ReplaySubject<ProgressStatus>();\n status$: Observable<ProgressStatus> = this.#statusSource.pipe(scan((acc: ProgressStatus, newVal) => ({ ...acc, ...newVal }), this.#status));\n #uploadStatus = new BehaviorSubject<boolean | null>(null);\n uploadStatus$: Observable<boolean | null> = this.#uploadStatus.asObservable();\n\n /**\n * Upload a file.\n * @param url The URL to upload the file to\n * @param file The file to be uploaded\n * @param label A label that will show up in the upload overlay dialog while uploading\n */\n upload(url: string, file: File, label?: string, silent?: boolean): Observable<any> {\n return this.#executeUpload(url, file, label || file.name, silent);\n }\n\n /**\n * Upload files using multipart upload.\n * @param url The URL to upload the files to\n * @param files The files to be uploaded\n * @param data Data to be send along with the files\n * @param label A label that will show up in the upload overlay dialog while uploading\n */\n uploadMultipart(url: string, files: File[], data?: any, label?: string, silent?: boolean): Observable<any> {\n return this.#executeMultipartUpload(url, files, label || 'Upload', data, silent);\n }\n\n createDocument(url: string, data: any): Observable<any> {\n const formData: FormData = this.#createFormData({ data });\n const request = this.#createHttpRequest(url, { formData }, false);\n return this.#http.request(request).pipe(\n filter((obj: any) => obj && obj.body),\n transformResponse(),\n catchError((err) => throwError(() => err))\n );\n }\n\n /**\n * Cancels an upload request and removes it from the list of files being uploaded.\n * @param id ID of the UploadItem to be canceled\n */\n cancelItem(id?: string) {\n if (id) {\n const match = this.#status.items.find((i) => i.id === id);\n if (match) {\n match.subscription.unsubscribe();\n this.#status.items = this.#status.items.filter((i) => i.id !== id);\n }\n } else {\n this.#status.items.forEach((element) => element.subscription.unsubscribe());\n this.#status.items = [];\n }\n this.#status.err = this.#status.items.filter((i) => i.err).length;\n this.#statusSource.next(this.#status);\n }\n\n /**\n * Prepares Formdata for multipart upload.\n * @param from contains form and or file\n */\n #createFormData({ file, data }: { data?: any; file?: File[] }): FormData {\n const formData: FormData = new FormData();\n (file || []).forEach((f) => formData.append('files', f, f.name));\n data ? formData.append('data', new Blob([JSON.stringify(data)], { type: 'application/json' })) : null;\n return formData;\n }\n\n /**\n * Prepares Http Request.\n * @param url The URL to upload the file to\n * @param content formdata or single file\n * @param reportProgress Request should report upload progress\n * @param method Request method\n */\n #createHttpRequest(url: string, content: Partial<{ formData: FormData; file: File }>, reportProgress: boolean, method = 'POST'): HttpRequest<any> {\n const { formData, file } = content;\n // add request param to bypass the serviceworker\n url += `${url.indexOf('?') === -1 ? '?' : '&'}ngsw-bypass=1`;\n\n let headers = this.#backend.getAuthHeaders();\n if (file) {\n headers = headers.set('Content-Disposition', `attachment; filename*=utf-8''${encodeURIComponent(file.name)}`);\n }\n\n return new HttpRequest(method, url, file || formData, { headers, reportProgress });\n }\n\n /**\n * Prepares single file POST upload.\n * @param url The URL to upload the file to\n * @param file The file to be uploaded\n * @param label A label that will show up in the upload overlay dialog while uploading\n */\n #executeUpload(url: string, file: File, label: string, silent = false): Observable<any> {\n const request = this.#createHttpRequest(url, { file }, !silent);\n return silent\n ? this.#http.request(request).pipe(filter((res) => res instanceof HttpResponse))\n : this.#startUploadWithFile(request, label).pipe(transformResponse());\n }\n\n /**\n * Prepare multipart upload.\n * @param url The URL to upload the file to\n * @param file Array of files to be uploaded\n * @param label A label that will show up in the upload overlay dialog while uploading\n * @param data Data to be send along with the files\n */\n #executeMultipartUpload(url: string, file: File[], label: string, data?: any, silent = false): Observable<any> {\n const formData: FormData = this.#createFormData({ file, data });\n const request = this.#createHttpRequest(url, { formData }, !silent);\n return silent\n ? this.#http.request(request).pipe(filter((res) => res instanceof HttpResponse))\n : this.#startUploadWithFile(request, label).pipe(transformResponse());\n }\n\n #generateResult(result: CreatedObject): UploadResult[] {\n const objects = result.body?.objects;\n if (objects && objects.length > 1) {\n const data = objects[0];\n // const bp = this.#system.getBaseProperties();\n // const label = data.properties[bp.title] ? data.properties[bp.title].value : '...';\n // TODO: Get the label from somewhere\n const label = '...';\n return [\n {\n objectId: objects.map((val: any) => val.properties[BaseObjectTypeField.OBJECT_ID].value),\n contentStreamId: data.contentStreams![0]?.contentStreamId,\n filename: data.contentStreams![0]?.fileName,\n label: `(${objects.length}) ${label}`\n }\n ];\n } else {\n return result.body!.objects.map((o) => ({\n objectId: o.properties[BaseObjectTypeField.OBJECT_ID].value,\n contentStreamId: o.contentStreams![0]?.contentStreamId,\n filename: o.contentStreams![0]?.fileName,\n // label: o.properties[bp.title] ? o.properties[bp.title].value : o.contentStreams![0]?.fileName\n // TODO: Get the label from somewhere\n label: o.contentStreams![0]?.fileName\n }));\n }\n }\n\n #createProgressStatus(event: any, progress: Subject<number>, id: string) {\n if (event.type === HttpEventType.UploadProgress) {\n const percentDone = Math.round((100 * event.loaded) / event.total);\n progress.next(percentDone);\n } else if (event instanceof HttpResponse) {\n progress.complete();\n // add upload response\n // this.status.items = this.status.items.filter(s => s.id !== id);\n const idx = this.#status.items.findIndex((s) => s.id === id);\n if (idx !== -1) {\n this.#status.items[idx].result = this.#generateResult(event);\n this.#statusSource.next(this.#status);\n }\n }\n }\n\n #createUploadError(err: HttpErrorResponse, progress: Subject<number>, id: string): Observable<HttpErrorResponse> {\n const statusItem = this.#status.items.find((s) => s.id === id);\n statusItem!.err = {\n code: err.status,\n message: err.error ? err.error.errorMessage : err.message\n };\n this.#logger.error('upload failed', statusItem);\n this.#status.err++;\n this.#statusSource.next(this.#status);\n progress.next(0);\n return throwError(() => new Error(err.message));\n }\n\n /**\n * Actually starts the upload process.\n * @param request Request to be executed\n * @param label A label that will show up in the upload overlay dialog while uploading\n */\n #startUploadWithFile(request: any, label: string): Observable<CreatedObject> {\n return new Observable((o: any) => {\n const id = Utils.uuid();\n const progress = new Subject<number>();\n let result: any;\n // Create a subscription from the http request that will be applied to the upload\n // status item in order to be able to cancel the request later on.\n this.#uploadStatus.next(false);\n const subscription = this.#http\n .request(request)\n .pipe(\n catchError((err: HttpErrorResponse) => this.#createUploadError(err, progress, id)),\n tap((event: HttpErrorResponse | HttpEvent<unknown>) => this.#createProgressStatus(event, progress, id))\n )\n // actual return value of this function\n .subscribe({\n next: (res: any) => (res.status ? (result = res) : null),\n error: (err) => {\n o.error(err);\n this.#uploadStatus.next(true);\n o.complete();\n },\n complete: () => {\n o.next(result);\n this.#uploadStatus.next(true);\n o.complete();\n }\n });\n\n this.#status.items.push({\n id,\n filename: label,\n progress: progress.asObservable(),\n subscription,\n err: undefined\n });\n this.#statusSource.next(this.#status);\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { delay, map, switchMap, tap } from 'rxjs/operators';\nimport { DmsObject } from '../../model/dms-object.model';\nimport { Utils } from '../../util/utils';\nimport { Sort } from '../../util/utils.helper.enum';\nimport { ApiBase } from '../backend/api.enum';\nimport { HttpOptions } from '../backend/backend.interface';\nimport { BackendService } from '../backend/backend.service';\nimport { EventService } from '../event/event.service';\nimport { YuvEventType } from '../event/events';\nimport { SearchService } from '../search/search.service';\nimport { SearchResponse, SearchResult, SearchResultContent, SearchResultItem } from '../search/search.service.interface';\nimport { BaseObjectTypeField, ContentStreamField, SystemResult } from '../system/system.enum';\nimport { UploadService } from '../upload/upload.service';\nimport {\n CoreApiObject,\n CoreApiObjectProperty,\n CoreApiResponse,\n ObjectCopyOptions,\n ObjectDeleteOptions,\n ObjectDeleteResult,\n ObjectMoveOptions,\n ObjectOptions\n} from './dms.service.interface';\nimport { DmsObjectTag } from '../../model/dms-object.interface';\n/**\n * Service for working with dms objects: create them, delete, etc.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DmsService {\n #searchService = inject(SearchService);\n #backend = inject(BackendService);\n #eventService = inject(EventService);\n #uploadService = inject(UploadService);\n\n // general trigger operator to handle all dms events\n private triggerEvent(event: YuvEventType, id?: string, silent = false) {\n return (stream: any): Observable<any> =>\n stream.pipe(\n // update does not return permissions, so we need to re-load the whole dms object\n // TODO: Remove once permissions are provided\n switchMap((res) => (!id ? of(res) : this.getDmsObject(id))),\n // TODO: enable once permissions are provided\n // map((res) => this.searchResultToDmsObject(this.searchService.toSearchResult(res).items[0])),\n tap((res: any) => !silent && this.#eventService.trigger(event, res))\n );\n }\n\n // general trigger operator to handle all dms events\n #triggerEvents(event: YuvEventType, ids?: string[], silent = false) {\n return (stream: any): Observable<any> =>\n stream.pipe(\n // update does not return permissions, so we need to re-load the whole dms object\n // TODO: Remove once permissions are provided\n switchMap((res) => (!ids ? of(res) : this.getDmsObjects(ids))),\n // TODO: enable once permissions are provided\n // map((_res: any[]) => _res.map((res, i) => res?._error ? { ...res, id: ids?[i] } : this.searchResultToDmsObject(this.searchService.toSearchResult(res).items[0]))),\n map((_res: any[]) => _res.map((res, i) => (res?._error && ids ? { ...res, id: ids[i] } : res))),\n tap((res: any) => !silent && res.forEach((o: any) => o && this.#eventService.trigger(event, o)))\n );\n }\n\n /**\n * Create new dms object(s). Providing an array of files here instead of one will create\n * a new dms object for every file. In this case indexdata will shared across all files.\n * @param objectTypeId The ID of the object type to be created\n * @param indexdata Indexdata for the new object(s)\n * @param files File(s) to create dms objects content(s) with\n * @param label A label that will show up in the upload overlay dialog while uploading\n *\n * @returns Array of IDs of the objects that have been created\n */\n createDmsObject(\n objectTypeId: string,\n indexdata: any,\n files: File[],\n label?: string,\n silent = false,\n options: ObjectOptions = { waitForSearchConsistency: true }\n ): Observable<string[]> {\n const url = `${this.#backend.getApiBase(ApiBase.apiWeb)}/dms/objects${options.waitForSearchConsistency ? '?waitForSearchConsistency=true' : ''}`;\n const data = indexdata;\n data[BaseObjectTypeField.OBJECT_TYPE_ID] = objectTypeId;\n\n const upload = files.length ? this.#uploadService.uploadMultipart(url, files, data, label, silent) : this.#uploadService.createDocument(url, data);\n\n return upload\n .pipe(\n map((res) => res.map((r: any) => r.properties[BaseObjectTypeField.OBJECT_ID].value)),\n // TODO: Replace by proper solution\n // Right now there is a gap between when the object was\n // created and when it is indexed. So delaying here will\n // give backend time to get its stuff together.\n delay(1000)\n )\n .pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_CREATED, '', silent));\n }\n\n /**\n * Delete a dms object.\n * @param id ID of the object to be deleted\n */\n deleteDmsObject(id: string, silent = false): Observable<any> {\n const url = `/dms/objects/${id}`;\n return this.#backend\n .delete(url, ApiBase.apiWeb)\n .pipe(map(() => ({ id })))\n .pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_DELETED, '', silent));\n }\n\n /**\n * Restore older version of a dms object.\n * @param id ID of the object to be restored\n * @param version version of the object to be restored\n */\n restoreDmsObject(id: string, version: number, silent = false): Observable<any> {\n const url = `/dms/objects/${id}/versions/${version}/actions/restore?waitForSearchConsistency=true&restoreParentId=false`;\n return this.#backend.post(url, {}, ApiBase.apiWeb).pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_UPDATED, id, silent));\n }\n\n /**\n * Upload (add/replace) content to a dms object.\n * @param objectId ID of the dms object to upload the file to\n * @param file The file to be uploaded\n * @param label A label that will show up in the upload overlay dialog while uploading\n */\n uploadContent(objectId: string, file: File, label?: string, silent?: boolean): Observable<any> {\n return this.#uploadService.upload(this.getContentPath(objectId), file, label, silent).pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_UPDATED, objectId));\n }\n\n /**\n * Path of dms object content file.\n * @param objectId ID of the dms object\n * @param version version number of the dms object\n */\n getContentPath(objectId: string, version?: number) {\n return `${this.#backend.getApiBase(ApiBase.apiWeb)}/dms/objects/${objectId}/contents/file${version ? '?version=' + version : ''}`;\n }\n\n /**\n * Original API Path of dms object content file.\n * @param objectId ID of the dms object\n * @param version version number of the dms object\n * @param rendition should return rendition path of the dms object\n */\n getFullContentPath(objectId: string, version?: number, rendition = false) {\n return `${this.#backend.getApiBase(ApiBase.core, true)}/dms/objects/${objectId}${version ? '/versions/' + version : ''}/contents/${\n rendition ? 'renditions/pdf' : 'file'\n }`;\n }\n\n getSlideURI(objectId: string, mimeType?: string): string | undefined {\n const supportedMimeTypes = ['*/*'];\n let supported = false;\n if (mimeType) {\n // check if mime type supports slides\n supportedMimeTypes.forEach((p) => (supported = supported || Utils.patternToRegExp(p).test(mimeType)));\n }\n return !mimeType || supported ? `${this.#backend.getApiBase(ApiBase.core, true)}/dms/objects/${objectId}/contents/renditions/slide` : undefined;\n }\n\n /**\n * Downloads the content of dms objects.\n *\n * @param DmsObject[] dmsObjects Array of dms objects to be downloaded\n * @param withVersion should download specific version of the object\n */\n downloadContent(objects: DmsObject[], withVersion?: boolean) {\n objects.forEach((object, i) =>\n setTimeout(\n () => {\n const uri = `${this.getContentPath(object?.id, withVersion ? object?.version : undefined)}`;\n this.#backend.download(uri);\n },\n Utils.isSafari() ? i * 1000 : 0 // Safari does not allow multi download\n )\n );\n }\n\n /**\n * Fetch a dms object.\n * @param id ID of the object to be retrieved\n * @param version Desired version of the object\n */\n getDmsObject(id: string, version?: number, silent = false, requestOptions?: HttpOptions | undefined): Observable<DmsObject> {\n return this.#backend\n .get(`/dms/objects/${id}${version ? '/versions/' + version : ''}`, undefined, requestOptions)\n .pipe(\n map((res) => {\n const item: SearchResultItem = this.#searchService.toSearchResult(res).items[0];\n return this.#searchResultToDmsObject(item);\n })\n )\n .pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_LOADED, '', silent));\n }\n\n /**\n * Get tags of a dms object.\n * @param objectData Data field of the dms object\n */\n getDmsObjectTags(objectData: Record<string, unknown>): DmsObjectTag[] {\n return ((objectData[BaseObjectTypeField.TAGS] as any[]) || []).map((row: any[]) => ({\n name: row[0] as string,\n state: row[1] as number,\n creationDate: new Date(row[2] as string),\n traceId: row[3] as string\n }));\n }\n\n /**\n * Updates a tag on a dms object.\n * @param id The ID of the object\n * @param tag The tag to be updated\n * @param value The tags new value\n */\n setDmsObjectTag(id: string, tag: string, value: any, silent = false): Observable<any> {\n return this.#backend\n .post(`/dms/objects/tags/${tag}/state/${value}?query=SELECT * FROM system:object WHERE system:objectId='${id}'`, {}, ApiBase.core)\n .pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_UPDATED, id, silent));\n }\n\n /**\n * Deletes a tag from a dms object.\n * @param id The ID of the object\n * @param tag The tag to be deleted\n */\n deleteDmsObjectTag(id: string, tag: string, silent = false): Observable<any> {\n return this.#backend.delete(`/dms/objects/${id}/tags/${tag}`, ApiBase.core).pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_UPDATED, id, silent));\n }\n\n /**\n * Update indexdata of a dms object.\n * @param id ID of the object to apply the data to\n * @param data Indexdata to be applied\n * @param silent flag to trigger DMS_OBJECT_UPDATED event\n */\n updateDmsObject(id: string, data: any, silent = false, options: ObjectOptions = { waitForSearchConsistency: true }): Observable<DmsObject> {\n const url = `/dms/objects/${id}${options.waitForSearchConsistency ? '?waitForSearchConsistency=true' : ''}`;\n return this.#backend.patch(url, data).pipe(this.triggerEvent(YuvEventType.DMS_OBJECT_UPDATED, id, silent));\n }\n\n /**\n * Updates given objects.\n * @param objects the objects to updated\n */\n updateDmsObjects(\n objects: { id: string; data: { [key: string]: any } }[],\n silent = false,\n options: ObjectOptions = { waitForSearchConsistency: true }\n ): Observable<DmsObject[]> {\n const url = `/dms/objects${options.waitForSearchConsistency ? '?waitForSearchConsistency=true' : ''}`;\n return this.#backend\n .patch(url, {\n patches: objects.map((o) => ({\n id: o.id,\n data: o.data\n }))\n })\n .pipe(\n this.#triggerEvents(\n YuvEventType.DMS_OBJECT_UPDATED,\n objects.map((o) => o.id),\n silent\n )\n );\n }\n\n /**\n * Updates a tag on a dms object.\n * @param ids List of IDs of objects\n * @param tag The tag to be updated\n * @param value The tags new value\n */\n updateDmsObjectsTag(ids: string[], tag: string, value: any, silent = false): Observable<any> {\n return this.batchUpdateTag(ids, tag, value).pipe(this.#triggerEvents(YuvEventType.DMS_OBJECT_UPDATED, ids, silent));\n }\n\n /**\n * Moves given objects to a different folder.\n * @param folderId the id of the new parent folder\n * @param objects objects to be moved\n * @param options options for the move operation\n */\n moveDmsObjects(targetFolderId: string | null, objects: DmsObject[], options?: ObjectMoveOptions): Observable<any> {\n return this.updateDmsObjects(objects.map((o) => ({ id: o.id, data: { [BaseObjectTypeField.PARENT_ID]: targetFolderId } }), true)).pipe(\n tap((res) => !options?.silent && this.#eventService.trigger(YuvEventType.DMS_OBJECTS_MOVED, res))\n );\n }\n\n /**\n * Copy given objects to a different folder. The objects will be copied with their indexdata referencing\n * the existing content of the source object.\n * @param targetFolderId The ID of the target folder\n * @param objects The objects to be copied\n * @param options options for the copy operation\n */\n copyDmsObjects(targetFolderId: string | null, objects: DmsObject[], options?: ObjectCopyOptions): Observable<CoreApiResponse> {\n const excludeProperties = [\n BaseObjectTypeField.OBJECT_ID,\n BaseObjectTypeField.CREATED_BY,\n BaseObjectTypeField.CREATION_DATE,\n BaseObjectTypeField.MODIFIED_BY,\n BaseObjectTypeField.MODIFICATION_DATE,\n BaseObjectTypeField.VERSION_NUMBER,\n BaseObjectTypeField.TRACE_ID,\n BaseObjectTypeField.PARENT_OBJECT_TYPE_ID,\n BaseObjectTypeField.PARENT_VERSION_NUMBER\n ];\n\n const mappedObjects: CoreApiObject[] = objects.map((o) => {\n o.data[BaseObjectTypeField.PARENT_ID] = targetFolderId;\n\n // Remove properties that are not allowed to be copied.\n // This also includes content stream fields bundled into the objects data field.\n // Properties ending with '_title' are also excluded as they are enrichment values\n // provided by API-Web.\n Object.keys(o.data)\n .filter((key) => key.endsWith('_title') || excludeProperties.includes(key) || Object.values(ContentStreamField).includes(key))\n .forEach((key) => Reflect.deleteProperty(o.data, key));\n\n // map filtered data field to data format required by the Core-API\n const properties = Object.keys(o.data).reduce(\n (acc, key) => {\n acc[key] = { value: o.data[key] };\n return acc;\n },\n {} as Record<string, CoreApiObjectProperty>\n );\n\n return {\n properties: properties,\n objectTypeId: o.objectTypeId,\n ...(o.content\n ? {\n contentStreams: [o.content]\n }\n : {})\n } as CoreApiObject;\n });\n\n const query = options\n ? Object.keys(options)\n .map((key: string) => `${key}=${(options as any)[key]}`)\n .join('&')\n : '';\n return this.#backend.post(`/dms/objects?${query}`, { objects: mappedObjects }, ApiBase.core);\n }\n\n /**\n * Get a bunch of dms objects.\n * @param ids List of IDs of objects to be retrieved\n */\n getDmsObjects(ids: string[], silent = false): Observable<DmsObject[]> {\n return this.batchGet(ids)\n .pipe(\n map((_res: any[]) =>\n _res.map((res, i) => (res?._error ? { ...res, id: ids[i] } : this.#searchResultToDmsObject(this.#searchService.toSearchResult(res).items[0])))\n )\n )\n .pipe(this.#triggerEvents(YuvEventType.DMS_OBJECT_LOADED, undefined, silent));\n }\n\n /**\n * Delete a bunch of dms objects.\n * @param ids List of IDs of objects to be deleted\n * @param options Options for the delete operation\n * @returns Array of delete results.\n */\n deleteDmsObjects(\n objects: string[] | { id: string; subject: string }[],\n\n options?: ObjectDeleteOptions\n ): Observable<ObjectDeleteResult[]> {\n const queryParams = options\n ? `?${Object.keys(options)\n .filter((k) => ['waitForSearchConsistency', 'greedy'].includes(k))\n .map((k) => `${k}=${(options as any)[k]}`)\n .join('&')}`\n : '';\n\n return this.#backend\n .delete(`/dms/objects${queryParams}`, ApiBase.core, {\n body: {\n objects: objects.map((o) => ({\n properties:\n typeof o === 'string'\n ? {\n 'system:objectId': {\n value: o\n }\n }\n : {\n 'system:objectId': { value: o.id },\n subject: { value: o.subject }\n }\n }))\n }\n })\n .pipe(\n map((res) =>\n res?.objects?.map((r: any) => {\n const v = r.options?.[SystemResult.DELETE];\n return {\n id: r.properties?.[BaseObjectTypeField.OBJECT_ID]?.value,\n properties: r.properties,\n ...(v?.httpStatusCode >= 400 ? { _error: { status: v.httpStatusCode, message: v.message } } : {})\n };\n })\n )\n )\n .pipe(this.#triggerEvents(YuvEventType.DMS_OBJECT_DELETED, undefined, options?.silent));\n }\n\n /**\n * Fetch a dms object versions.\n * @param id ID of the object to be retrieved\n */\n getDmsObjectVersions(id: string): Observable<DmsObject[]> {\n return this.#backend.get('/dms/objects/' + id + '/versions').pipe(\n map((res) => {\n const items: SearchResultItem[] = this.#searchService.toSearchResult(res).items || [];\n return items.map((item) => this.#searchResultToDmsObject(item));\n }),\n map((res) => res.sort(Utils.sortValues('version', Sort.DESC)))\n );\n }\n\n getDmsObjectVersion(id: string, version: number): Observable<DmsObject> {\n return this.#backend\n .get(`/dms/objects/${id}/versions/${version}`)\n .pipe(map((res) => this.#searchResultToDmsObject(this.#searchService.toSearchResult(res).items[0])));\n }\n\n coreApiResponseToDmsObject(res: CoreApiResponse): DmsObject {\n return this.#searchResultToDmsObject({\n objectTypeId: res.properties[BaseObjectTypeField.OBJECT_TYPE_ID].value as string,\n fields: new Map(Object.entries(res.properties)),\n content: res.contentStreams?.[0]\n });\n }\n\n #searchResultToDmsObject(resItem: SearchResultItem): DmsObject {\n return new DmsObject(resItem);\n }\n\n /**\n * Transforms a plain data object to a DmsObject.\n * @param data The plain data object\n * @returns DmsObject\n */\n toDmsObject(data: Record<string, unknown>): DmsObject {\n const fields = new Map<string, unknown>();\n Object.keys(data).forEach((key) => fields.set(key, data[key]));\n const item: SearchResultItem = {\n content: {\n contentStreamId: data[ContentStreamField.ID] as string,\n mimeType: data[ContentStreamField.MIME_TYPE] as string,\n fileName: data[ContentStreamField.FILENAME] as string,\n size: data[ContentStreamField.LENGTH] as number,\n digest: data[ContentStreamField.DIGEST] as string,\n repositoryId: data[ContentStreamField.REPOSITORY_ID] as string,\n range: data[ContentStreamField.RANGE] as string\n },\n objectTypeId: data[BaseObjectTypeField.OBJECT_TYPE_ID] as string,\n fields\n };\n return this.#searchResultToDmsObject(item);\n }\n\n batchUpdateTag(ids: string[], tag: string, value: any) {\n return this.#backend.batch(\n ids.map((id) => ({\n method: 'POST',\n uri: `/dms/objects/tags/${tag}/state/${value}?query=SELECT * FROM system:object WHERE system:objectId='${id}'`,\n base: ApiBase.core,\n body: {}\n }))\n );\n }\n\n batchDeleteTag(ids: string[], tag: string) {\n return this.#backend.batch(\n ids.map((id) => ({\n method: 'DELETE',\n uri: `/dms/objects/${id}/tags/${tag}`,\n base: ApiBase.core\n }))\n );\n }\n\n batchDelete(ids: string[]) {\n return this.#backend.batch(ids.map((id) => ({ method: 'DELETE', uri: `/dms/objects/${id}` })));\n }\n\n batchGet(ids: string[]) {\n return this.#backend.batch(ids.map((id) => ({ method: 'GET', uri: `/dms/objects/${id}` })));\n }\n\n /**\n * Map search result from the backend to applications SearchResult object\n * @param searchResponse The backend response\n */\n toSearchResult(searchResponse: SearchResponse): SearchResult {\n const resultListItems: SearchResultItem[] = [];\n const objectTypes: string[] = [];\n\n searchResponse.objects.forEach((o: any) => {\n const fields = new Map();\n // process properties section of result\n Object.keys(o.properties).forEach((key: string) => {\n let value = o.properties[key].value;\n if (o.properties[key].clvalue) {\n // table fields will have a clientValue too ...\n value = o.properties[key].clvalue;\n // ... and also may contain values that need to be resolved\n if (o.properties[key].resolvedValues) {\n value.forEach((v: any) => {\n Object.keys(v).forEach((k) => {\n const resValue = Array.isArray(v[k]) ? v[k].map((i: any) => o.properties[key].resolvedValues[i]) : o.properties[key].resolvedValues[v[k]];\n if (resValue) {\n v[`${k}_title`] = resValue;\n }\n });\n });\n }\n }\n\n fields.set(key, value);\n if (o.properties[key].title) {\n fields.set(key + '_title', o.properties[key].title);\n }\n });\n\n // process contentStreams section of result if available.\n // Objects that don't have files attached won't have this section\n let content: SearchResultContent | undefined;\n if (o.contentStreams && o.contentStreams.length > 0) {\n // we assume that each result object only has ONE file attached, altough\n // this is an array and there may be more\n const contentStream = o.contentStreams[0];\n // also add contentstream related fields to the result fields\n fields.set(ContentStreamField.LENGTH, contentStream.length);\n fields.set(ContentStreamField.MIME_TYPE, contentStream.mimeType);\n fields.set(ContentStreamField.FILENAME, contentStream.fileName);\n fields.set(ContentStreamField.ID, contentStream.contentStreamId);\n fields.set(ContentStreamField.RANGE, contentStream.contentStreamRange);\n fields.set(ContentStreamField.REPOSITORY_ID, contentStream.repositoryId);\n fields.set(ContentStreamField.DIGEST, contentStream.digest);\n fields.set(ContentStreamField.ARCHIVE_PATH, contentStream.archivePath);\n\n content = {\n contentStreamId: contentStream.contentStreamId,\n repositoryId: contentStream.repositoryId,\n range: contentStream.range,\n digest: contentStream.digest,\n archivePath: contentStream.archivePath,\n fileName: contentStream.fileName,\n mimeType: contentStream.mimeType,\n size: contentStream.length\n };\n }\n\n const objectTypeId = o.properties[BaseObjectTypeField.OBJECT_TYPE_ID] ? o.properties[BaseObjectTypeField.OBJECT_TYPE_ID].value : null;\n if (objectTypes.indexOf(objectTypeId) === -1) {\n objectTypes.push(objectTypeId);\n }\n\n resultListItems.push({\n objectTypeId,\n content,\n fields,\n permissions: o.permissions\n });\n });\n\n const result: SearchResult = {\n hasMoreItems: searchResponse.hasMoreItems,\n totalNumItems: searchResponse.totalNumItems,\n items: resultListItems,\n objectTypes\n };\n return result;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { map, Observable } from 'rxjs';\nimport { BackendService } from '../backend/backend.service';\nimport { OrganizationSetEntry } from './idm.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IdmService {\n #backend = inject(BackendService);\n\n queryOrganizationEntity(term: string, targetTypes: string[], size?: number): Observable<OrganizationSetEntry[]> {\n return this.#backend.get(`/idm/search?search=${term}${size ? `&size=${size}` : ''}`).pipe(\n map((res) => [\n ...(targetTypes.includes('user')\n ? res.users.map((u: any) => ({\n id: u.id,\n title: `${u.lastname}, ${u.firstname} (${u.username})`, // TODO: u.title,\n type: 'user'\n }))\n : []),\n ...(targetTypes.includes('role')\n ? res.roles.map((u: any) => ({\n id: u.name,\n title: u.name,\n type: 'role'\n }))\n : [])\n ])\n );\n }\n}\n","export const YuvToastStyles = `\n.yuv-toast-container {\n --yuv-toast-container-padding: var(--ymt-spacing-m);\n --yuv-toast-success-background: var(--ymt-success-container);\n --yuv-toast-success-tone: var(--ymt-on-success-container);\n --yuv-toast-warning-background: var(--ymt-warning-container);\n --yuv-toast-warning-tone: var(--ymt-on-warning-container);\n --yuv-toast-error-background: var(--ymt-danger-container);\n --yuv-toast-error-tone: var(--ymt-on-danger-container);\n\n position: fixed;\n z-index: 9999;\n display: flex;\n flex-flow: column;\n align-items: center;\n justify-items: center;\n justify-content: center;\n gap: 1vh;\n pointer-events: none;\n }\n .yuv-toast-container.top {\n inset-block-start: 0;\n padding-block-start: var(--yuv-toast-container-padding);\n flex-direction: column-reverse;\n }\n .yuv-toast-container.top.center {\n inset-inline: 0;\n }\n .yuv-toast-container.bottom {\n inset-block-end: 0;\n padding-block-end: var(--yuv-toast-container-padding);\n }\n .yuv-toast-container.bottom.center {\n inset-inline: 0;\n }\n .yuv-toast-container.end {\n padding-inline-end: var(--yuv-toast-container-padding);\n align-items: end;\n right:0;\n}\n.yuv-toast-container.start {\n padding-inline-start: var(--yuv-toast-container-padding);\n align-items: start;\n left:0;\n }\n\n .yuv-toast {\n --_duration: 3s;\n --_bg-lightness: 90%;\n --_travel-distance: 0;\n\n font-family: system-ui, sans-serif;\n color: var(--ymt-on-surface);\n background: var(--ymt-surface-container);\n pointer-events: all;\n line-height: 1.5em;\n\n max-inline-size: min(50ch, 90vw);\n padding-block: .5ch;\n padding-inline: 1ch;\n border-radius: 3px;\n font-size: 1rem;\n\n will-change: transform;\n animation:\n fade-in .3s ease,\n slide-in .3s ease,\n fade-out .3s ease var(--_duration);\n\n \n\n @media (--motionOK) {\n --_travel-distance: 5vh;\n }\n }\n\n .yuv-toast strong {\n display: block;\n }\n\n .yuv-toast a {\n color: currentColor\n }\n\n .yuv-toast.success {\n background-color: var(--yuv-toast-success-background);\n color: var(--yuv-toast-success-tone);\n }\n .yuv-toast.warning {\n background-color: var(--yuv-toast-warning-background);\n color: var(--yuv-toast-warning-tone);\n }\n\n .yuv-toast.error {\n background-color: var(--yuv-toast-error-background);\n color: var(--yuv-toast-error-tone);\n }\n\n .yuv-toast:hover {\n animation-play-state: paused;\n }\n\n @keyframes fade-in {\n from { opacity: 0 }\n }\n\n @keyframes fade-out {\n to { opacity: 0 }\n }\n\n @keyframes slide-in {\n from { transform: translateY(var(--_travel-distance, 10px)) }\n }\n`;\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { ToastOptions } from './toast.interface';\nimport { YuvToastStyles } from './toast.styles';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ToastService {\n\n constructor(@Inject(DOCUMENT) private document: Document) {\n this._init();\n }\n\n success(\n message: string,\n title?: string,\n options?: ToastOptions\n ): Promise<void> {\n return this.toast(message, title, { ...options, level: 'success' });\n }\n\n warning(\n message: string,\n title?: string,\n options?: ToastOptions\n ): Promise<void> {\n return this.toast(message, title, { ...options, level: 'warning' });\n }\n\n info(message: string, title?: string, options?: ToastOptions): Promise<void> {\n return this.toast(message, title, { ...options, level: 'info' });\n }\n\n error(\n message: string,\n title?: string,\n options?: ToastOptions\n ): Promise<void> {\n return this.toast(message, title, { ...options, level: 'error' });\n }\n\n toast(\n message: string,\n title?: string,\n options?: ToastOptions\n ): Promise<void> {\n const toast = this._createToast(message, title, options);\n if (options?.duration !== undefined)\n toast.style.setProperty('--_duration', `${options.duration}s`);\n\n this._addToast(toast, options);\n\n return new Promise<void>(async (resolve, reject) => {\n await Promise.allSettled(\n toast.getAnimations().map((animation) => animation.finished)\n );\n const container = this._getToastContainer(options);\n container.removeChild(toast);\n if (container.children.length === 0) container.remove();\n resolve();\n });\n }\n\n private _createToast(\n message: string,\n title?: string,\n options?: ToastOptions\n ): HTMLOutputElement {\n const node = document.createElement('output');\n node.innerHTML = `${title ? `<strong>${title}</strong>` : ''}${message}`;\n node.classList.add('yuv-toast');\n if (options?.level) node.classList.add(options.level);\n node.setAttribute('role', 'status');\n node.setAttribute('aria-live', 'polite');\n return node;\n }\n\n private _addToast(toast: HTMLOutputElement, options?: ToastOptions) {\n const container = this._getToastContainer(options);\n container.appendChild(toast);\n }\n\n private _getToastContainer(options?: ToastOptions) {\n const pos = options?.position || 'bottom-center';\n let container = this.document.querySelector(\n `html > section.${pos.split('-').join('.')}`\n );\n if (!container) {\n container = this.document.createElement('section');\n container.classList.add('yuv-toast-container', ...pos.split('-'));\n this.document.firstElementChild!.insertBefore(\n container,\n this.document.body\n );\n }\n return container;\n }\n\n private _init(): void {\n const style = this.document.createElement('style');\n style.innerHTML = YuvToastStyles;\n this.document.head.appendChild(style);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { AuthService } from '../auth/auth.service';\nimport { EventService } from '../event/event.service';\nimport { YuvEventType } from '../event/events';\nimport { ToastOptions } from '../toast/toast.interface';\nimport { ToastService } from '../toast/toast.service';\n\n/**\n * Shows a message after completing each action.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationService {\n #toastService = inject(ToastService);\n #authService = inject(AuthService);\n #eventService = inject(EventService);\n\n /**\n * Set to true to suppress any notifications\n */\n silent = false;\n\n /**\n * Default Notofication Options\n *\n */\n private options: Partial<ToastOptions> = {\n position: 'bottom-end'\n };\n\n constructor() {\n this.#authService.authenticated$.subscribe((a) => (this.silent = !a));\n this.#eventService.on(YuvEventType.LOGOUT).subscribe(() => (this.silent = true));\n }\n\n /**\n * Show info colored massage (blue)\n *\n * @param string title\n * @param string msg\n */\n info(title: string, msg?: string) {\n this.toast(title, msg);\n }\n\n /**\n * Show success colored massage (green)\n * @param string title\n * @param string msg\n */\n success(title: string, msg?: string) {\n this.toast(title, msg, 'success');\n }\n\n /**\n * can not be in use\n *\n * @param string title\n * @param string msg\n */\n wait(title: string, msg?: string) {\n this.toast(title, msg, 'wait');\n }\n\n /**\n * Show error colored massage (red)\n *\n * @param string title\n * @param string msg\n */\n error(title: string, msg?: string) {\n this.toast(title, msg, 'error', {\n duration: 5\n });\n }\n\n /**\n * Show warning colored massage (yellow)\n *\n * @param string title\n * @param string msg\n */\n warning(title: string, msg?: string) {\n this.toast(title, msg, 'warning');\n }\n\n /**\n * Public wrapper for accessing the Toastr\n *\n * @param string title\n * @param string msg\n * @param string mode\n * @param _options\n */\n private toast(title: string, msg?: string, mode?: string, _options?: ToastOptions) {\n this.doToast(title, msg, { ...this.options, ..._options }, mode);\n }\n\n /**\n * Accessing the toastr service\n *\n * @param string msg\n * @param string title\n * @param options\n * @param string mode\n */\n private doToast(title: string, msg?: string, options?: ToastOptions, mode?: string) {\n if (this.silent) return;\n switch (mode) {\n case 'success': {\n this.#toastService.success(title, msg, options);\n break;\n }\n case 'error': {\n this.#toastService.error(title, msg, options);\n break;\n }\n case 'warning': {\n this.#toastService.warning(title, msg, options);\n break;\n }\n case 'confirm': {\n this.#toastService.info(title, msg, options);\n break;\n }\n default: {\n this.#toastService.info(title, msg, options);\n }\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { Utils } from '../../util/utils';\nimport { Logger } from '../logger/logger.service';\nimport { PendingChangesComponent } from './pending-changes-component.interface';\n\n/**\n * EditingObserver service is used to track changes made inside the application, that should prevent\n * doing something or going somewhere before the changes are persisted or ignored. For example when\n * the user starts editing form data and tries to navigate away before saving the changes, this service\n * will take care of notifying the user.\n *\n * It is working kind of like a registry for ongoing tasks that need to be monitored. Every component\n * that needs to be aware of changes to be persisted can start a task and finish it when everything is done.\n *\n * Other components can ask the service for pending tasks to know whether or not to execute an action\n * (e.g. list component will subscribe and prevent selecting another list item, if changes to the previous one haven't be finished)\n *\n * app.component will prevent relevant route changes while tasks are pending.\n */\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PendingChangesService {\n #logger = inject(Logger);\n\n #tasks: { id: string; message?: string }[] = [];\n #tasksSource = new ReplaySubject<{ id: string; message?: string }[]>();\n tasks$: Observable<{ id: string; message?: string }[]> = this.#tasksSource.asObservable();\n\n // private customMsg = '';\n #defaultMsg = 'You are currently editing the index data of a form that has not been saved. Unsaved data will be lost.';\n\n /**\n * Registers a task to be pending.\n * @param message alert message\n * @returns Unique id to be used for finishing this task\n */\n startTask(message: string): string {\n const taskId = Utils.uuid();\n this.#tasks.push({ id: taskId, message: message });\n this.#logger.debug('started pending task: ' + taskId);\n this.#tasksSource.next(this.#tasks);\n return taskId;\n }\n\n /**\n * Finishes a task\n * @param id The id of the task to be finished. This is the one the component got from startTask()\n */\n finishTask(id: string) {\n if (id) {\n this.#tasks = this.#tasks.filter((t) => t.id !== id);\n this.#tasksSource.next(this.#tasks);\n this.#logger.debug('finished pending task: ' + id);\n }\n }\n\n /**\n * Returns whether or not the service has pending tasks.\n * If an id is provided, the method will check existence of one specific task.\n *\n * @param id The id of the task to be checked\n * @returns\n */\n hasPendingTask(id?: string | string[]): boolean {\n return !id ? !!this.#tasks.length : Array.isArray(id) ? this.#tasks.some((value) => id.includes(value.id)) : this.#tasks.map((t) => t.id).includes(id);\n }\n\n /**\n * Returns whether or not the component|service has pending tasks.\n * Checks via confirm dialog\n * @param component\n * @returns\n */\n check(component?: PendingChangesComponent): boolean {\n if (component && component.hasPendingChanges ? !component.hasPendingChanges() : !this.hasPendingTask()) {\n return false;\n } else {\n const confirmed = confirm(this.#getConfirmMessage());\n if (confirmed) {\n this.clear();\n }\n return !confirmed;\n }\n }\n\n checkForPendingTasks(taskIds: string | string[]): boolean {\n if (this.hasPendingTask(taskIds)) {\n const confirmed = confirm(this.#getConfirmMessage());\n if (confirmed) {\n this.clear();\n }\n return !confirmed;\n } else {\n return false;\n }\n }\n\n #getConfirmMessage(): string {\n let msg = '';\n this.#tasks.forEach((t) => {\n // do not apply messages twice\n if (msg.indexOf(t.message || this.#defaultMsg) === -1) {\n msg = `${msg}${msg.length > 0 ? '\\n---\\n' : ''}${t.message || this.#defaultMsg}`;\n }\n });\n return msg;\n }\n\n /**\n * Clear list of pending tasks\n */\n clear() {\n this.#tasks = [];\n this.#tasksSource.next(this.#tasks);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\nimport { PendingChangesComponent } from './pending-changes-component.interface';\nimport { PendingChangesService } from './pending-changes.service';\n/**\n * Providing a `PendingChangesComponent`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PendingChangesGuard implements CanDeactivate<PendingChangesComponent> {\n constructor(private pendingChanges: PendingChangesService) {}\n\n canDeactivate(component: PendingChangesComponent): boolean {\n // if there are no pending changes, just allow deactivation; else confirm first\n return !this.pendingChanges.check(component);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { filter, isObservable, map, merge, Observable, of, switchMap } from 'rxjs';\nimport { PendingChangesService } from './pending-changes.service';\n\n/**\n * Service that provides guards for Material Dialog close operations.\n *\n * This service allows you to intercept and control dialog close events,\n * enabling confirmation dialogs or preventing accidental closure when\n * there are unsaved changes or pending operations.\n *\n * @example\n * ```typescript\n * readonly #dialogCloseGuard = inject(DialogCloseGuard);\n *\n * openDialog() {\n * const dialogRef = this.dialog.open(MyComponent);\n *\n * // Prevent dialog from closing if there are unsaved changes\n * this.#dialogCloseGuard.dialogCanClose(dialogRef, () => {\n * return this.hasUnsavedChanges() ? this.confirmClose() : true;\n * }).subscribe();\n * }\n * ```\n */\n@Injectable()\nexport class DialogCloseGuard {\n readonly #pendingChangesService = inject(PendingChangesService);\n /**\n * Converts a synchronous or asynchronous check function result to an Observable.\n *\n * This private method normalizes the return value of check functions,\n * ensuring they are always handled as Observables for consistent processing.\n *\n * @private\n * @param checkFunction - Function that returns either a boolean or Observable<boolean>\n * @returns Observable<boolean> - Always returns an Observable, regardless of input type\n */\n #canClose(checkFunction: () => boolean | Observable<boolean>): Observable<boolean> {\n const result = checkFunction();\n return isObservable(result) ? result : of(result);\n }\n\n /**\n * Guards against dialog closure when the backdrop is clicked.\n *\n * This method disables the default close behavior and only allows the dialog\n * to close when the provided check function returns true. The check is triggered\n * specifically when the user clicks on the dialog backdrop.\n *\n * @param dialogRef - Reference to the Material Dialog instance\n * @param checkFunction - Function that determines if the dialog can be closed.\n * Can return a boolean directly or an Observable<boolean>\n * @returns Observable<boolean> - Emits true when the dialog can be closed via backdrop click\n *\n * @example\n * ```typescript\n * this.dialogCloseGuard.checkBackdropCanClose(dialogRef, () => {\n * return this.formIsDirty ? this.showConfirmDialog() : true;\n * }).subscribe(canClose => {\n * if (canClose) {\n * dialogRef.close();\n * }\n * });\n * ```\n */\n checkBackdropCanClose(dialogRef: MatDialogRef<any>, checkFunction: () => boolean | Observable<boolean>): Observable<boolean> {\n dialogRef.disableClose = true;\n return dialogRef.backdropClick().pipe(switchMap(() => this.#canClose(checkFunction)));\n }\n\n /**\n * Guards against dialog closure when the Escape key is pressed.\n *\n * This method disables the default close behavior and only allows the dialog\n * to close when the provided check function returns true. The check is triggered\n * specifically when the user presses the Escape key.\n *\n * @param dialogRef - Reference to the Material Dialog instance\n * @param checkFunction - Function that determines if the dialog can be closed.\n * Can return a boolean directly or an Observable<boolean>\n * @returns Observable<boolean> - Emits true when the dialog can be closed via Escape key\n *\n * @example\n * ```typescript\n * this.dialogCloseGuard.checkKeydownEventsCanClose(dialogRef, () => {\n * return this.hasUnsavedChanges ? this.confirmDiscardChanges() : true;\n * }).subscribe(canClose => {\n * if (canClose) {\n * dialogRef.close();\n * }\n * });\n * ```\n */\n checkKeydownEventsCanClose(dialogRef: MatDialogRef<any>, checkFunction: () => boolean | Observable<boolean>): Observable<boolean> {\n dialogRef.disableClose = true;\n return dialogRef.keydownEvents().pipe(\n filter((event) => event.key === 'Escape'),\n switchMap(() => this.#canClose(checkFunction))\n );\n }\n\n /**\n * Comprehensive dialog close guard that handles both backdrop clicks and Escape key presses.\n *\n * This method provides a unified approach to guard dialog closure by monitoring both\n * backdrop clicks and Escape key events. When either event occurs, it runs the provided\n * check function and automatically closes the dialog if the check passes.\n *\n * This is the most convenient method when you want to guard against all common\n * dialog close scenarios with a single setup.\n *\n * @template T - The type of data that the dialog returns\n * @param dialogRef - Reference to the Material Dialog instance\n * @param checkFunction - Function that determines if the dialog can be closed.\n * Can return a boolean directly or an Observable<boolean>\n * @returns Observable<false | void> - Emits false if the dialog cannot be closed,\n * or void when the dialog is successfully closed\n *\n * @example\n * ```typescript\n * // Simple boolean check\n * this.dialogCloseGuard.dialogCanClose(dialogRef, () => !this.hasUnsavedChanges).subscribe();\n *\n * // Async check with confirmation dialog\n * this.dialogCloseGuard.dialogCanClose(dialogRef, () => {\n * return this.hasUnsavedChanges\n * ? this.confirmationService.confirm('Discard changes?')\n * : of(true);\n * }).subscribe();\n * ```\n */\n preventCloseUntil<T>(dialogRef: MatDialogRef<T>, checkFunction: () => boolean | Observable<boolean>): Observable<false | void> {\n dialogRef.disableClose = true;\n return merge(dialogRef.backdropClick(), dialogRef.keydownEvents().pipe(filter((event) => event.key === 'Escape'))).pipe(\n switchMap(() => this.#canClose(checkFunction)),\n map((canClose) => canClose && dialogRef.close())\n );\n }\n\n /**\n * Specialized dialog close guard that automatically checks for pending changes.\n *\n * This convenience method provides automatic pending changes detection without\n * requiring a custom check function. It integrates with the PendingChangesService\n * to determine if there are any unsaved changes, and handles both backdrop clicks\n * and Escape key presses automatically.\n *\n * This method is ideal when you want to prevent dialog closure if there are\n * pending changes anywhere in the application, without having to implement\n * custom change detection logic.\n *\n * @template T - The type of data that the dialog returns\n * @param dialogRef - Reference to the Material Dialog instance\n * @returns Observable<false | void> - Emits false if there are pending changes\n * preventing closure, or void when the dialog\n * is successfully closed\n *\n */\n pendingChangesDialogCanClose<T>(dialogRef: MatDialogRef<T>): Observable<false | void> {\n dialogRef.disableClose = true;\n return merge(dialogRef.backdropClick(), dialogRef.keydownEvents().pipe(filter((event) => event.key === 'Escape'))).pipe(\n switchMap(() => of(this.#pendingChangesService.check())),\n map((canClose) => !canClose && dialogRef.close())\n );\n }\n}\n","import { Directive, DoCheck, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { PendingChangesService } from './pending-changes.service';\nimport { MatTabGroup } from '@angular/material/tabs';\n\n@Directive({\n selector: 'mat-tab-group[yuvTabGuardDisable]'\n})\nexport class TabGuardDirective implements DoCheck {\n readonly #tabGroup = inject(MatTabGroup);\n readonly #pending = inject(PendingChangesService);\n\n constructor() {\n this.#tabGroup.selectedIndexChange.pipe(takeUntilDestroyed()).subscribe(() => this.#updateTabs());\n }\n\n ngDoCheck() {\n this.#updateTabs();\n }\n\n #updateTabs() {\n const activeIndex = this.#tabGroup.selectedIndex ?? 0;\n const hasPending = this.#pending.hasPendingTask();\n\n this.#tabGroup._tabs.forEach((tab, i) => ((tab as any).disabled = hasPending && i !== activeIndex));\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BackendService } from '../backend/backend.service';\nimport { BaseObjectTypeField } from '../system/system.enum';\nimport { ApiBase } from './../backend/api.enum';\nimport { PredictionClassifyResult, PredictionExtractResult } from './prediction.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PredictionService {\n #backend = inject(BackendService);\n\n classify(objectIDs: string[], schemaObjectTypeId = 'CLASSIFICATION'): Observable<Record<string, PredictionClassifyResult>> {\n const objects = objectIDs.map((objectID) => ({\n properties: {\n [BaseObjectTypeField.OBJECT_ID]: {\n value: objectID\n }\n }\n }));\n\n return this.#backend.post(`/classification?schemaObjectTypeId=${schemaObjectTypeId}`, { objects }, ApiBase.predict).pipe(\n map((res: any) =>\n res.predictions.reduce(\n (acc: any, curr: any) => ({\n ...acc,\n [curr[BaseObjectTypeField.OBJECT_ID].value]: {\n objectId: curr[BaseObjectTypeField.OBJECT_ID].value,\n properties: Object.keys(curr.properties).map((type: any) => ({\n type,\n probability: curr.properties[type].probability\n }))\n }\n }),\n {}\n )\n )\n );\n }\n\n /**\n * @param schemaObjectTypeId\n * @param objectIDs\n * @returns Observable<Record<string, PredictionClassifyResult>> string is objectID\n */\n extract(schemaObjectTypeId: string, objectIDs: string[]): Observable<Record<string, PredictionExtractResult>> {\n const searchParams = new URLSearchParams();\n searchParams.append('schemaObjectTypeId', schemaObjectTypeId);\n const objects = objectIDs.map((objectID) => ({\n properties: {\n [BaseObjectTypeField.OBJECT_ID]: {\n value: objectID\n }\n }\n }));\n\n return this.#backend.post(`/extraction?${searchParams.toString()}`, { objects }, ApiBase.predict).pipe(\n map((res) =>\n res.predictions.reduce(\n (acc: any, curr: any) => ({\n ...acc,\n [curr[BaseObjectTypeField.OBJECT_ID].value]: {\n objectId: curr[BaseObjectTypeField.OBJECT_ID].value,\n properties: curr.properties\n }\n }),\n {}\n )\n )\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DmsObject } from '../../model/dms-object.model';\nimport { BaseObjectTypeField, RetentionField, SystemSOT } from '../system/system.enum';\nimport { DmsService } from '../dms/dms.service';\nimport { RetentionState } from './retention.interface';\nimport { Observable, of } from 'rxjs';\n\n/**\n * Service to manage retention for DMS objects. This service allows to set retention\n * for objects and revert retention if necessary/possible.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RetentionService {\n #dms = inject(DmsService);\n\n /**\n * Set retention for given objects. This will add the retention SOT to the objects\n * and set the retention start and end date. If the retetion start date is in the\n * future, you can revert the retention until then by calling `revertRetention`.\n * @param dmsObjects The objects to set retention for\n * @param retentionStart Date when retention period should begin\n * @param retentionEnd Date when retention period should end\n * @param destructionDate Date when the object should be destroyed. This right now is just a\n * marker and has no effect on the object lifecycle.\n * @returns The updated objects\n */\n setRetention(dmsObjects: DmsObject[], retentionStart: Date, retentionEnd: Date, destructionDate?: Date): Observable<DmsObject[]> {\n const payload: { id: string; data: { [key: string]: any } }[] = [];\n dmsObjects.forEach((o) => {\n const data: Record<string, unknown> = {\n [BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS]: [\n ...(o.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[]),\n SystemSOT.DESTRUCTION_RETENTION\n ],\n [RetentionField.RETENTION_START]: retentionStart\n };\n if (retentionEnd) data[RetentionField.RETENTION_END] = retentionEnd;\n if (destructionDate) data[RetentionField.DESTRUCTION_DATE] = destructionDate;\n payload.push({ id: o.id, data });\n });\n\n return this.#dms.updateDmsObjects(payload);\n }\n\n getRetentionState(dmsObject: DmsObject): RetentionState {\n const objectSOTs = dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS];\n const hasRetentionSOT = objectSOTs && (objectSOTs as string[]).includes(SystemSOT.DESTRUCTION_RETENTION);\n if (hasRetentionSOT) {\n const now = new Date();\n const retentionStart = new Date(dmsObject.data[RetentionField.RETENTION_START] as string);\n const retentionEnd = dmsObject.data[RetentionField.RETENTION_END] ? new Date(dmsObject.data[RetentionField.RETENTION_END] as string) : null;\n const underRetention = !!(retentionStart < now || (retentionEnd && retentionEnd > now));\n return {\n underRetention,\n start: new Date(retentionStart),\n end: retentionEnd ? new Date(retentionEnd) : undefined\n };\n } else return { underRetention: false };\n }\n}\n","import { RangeValue } from '../../model/range-value.interface';\nimport { DateRange, FilesizeRange, Operator } from './search.service.interface';\n\nexport class SearchUtils {\n static dateRanges = ['today', 'yesterday', 'thisWeek', 'lastWeek', 'thisMonth', 'lastMonth', 'thisYear', 'lastYear'];\n static filesizeRanges = ['small', 'medium', 'large', 'verylarge'];\n\n static dateRangeStartEnd(dateRange: DateRange): { start: Date; end: Date } {\n let start: Date;\n let end: Date;\n\n switch (dateRange) {\n case 'today': {\n start = new Date();\n end = new Date();\n break;\n }\n case 'yesterday': {\n const yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n start = yesterday;\n end = new Date(yesterday);\n break;\n }\n case 'thisWeek': {\n const firstDay = new Date();\n firstDay.setDate(firstDay.getDate() - firstDay.getDay());\n\n start = firstDay;\n end = new Date();\n break;\n }\n case 'lastWeek': {\n const firstDay = new Date();\n firstDay.setDate(firstDay.getDate() - firstDay.getDay() - 7);\n const lastDay = new Date();\n lastDay.setDate(lastDay.getDate() - lastDay.getDay() - 1);\n\n start = firstDay;\n end = lastDay;\n break;\n }\n case 'thisMonth': {\n const firstDay = new Date();\n firstDay.setDate(1);\n\n start = firstDay;\n end = new Date();\n break;\n }\n case 'lastMonth': {\n const firstDay = new Date();\n firstDay.setDate(1);\n firstDay.setMonth(firstDay.getMonth() - 1);\n const lastDay = new Date();\n lastDay.setDate(0);\n\n start = firstDay;\n end = lastDay;\n break;\n }\n case 'thisYear': {\n const firstDay = new Date();\n firstDay.setMonth(0);\n firstDay.setDate(1);\n\n start = firstDay;\n end = new Date();\n break;\n }\n case 'lastYear': {\n const firstDay = new Date();\n firstDay.setFullYear(firstDay.getFullYear() - 1);\n firstDay.setMonth(0);\n firstDay.setDate(1);\n const lastDay = new Date();\n lastDay.setFullYear(lastDay.getFullYear() - 1);\n lastDay.setMonth(11);\n lastDay.setDate(31);\n\n start = firstDay;\n end = lastDay;\n break;\n }\n }\n if (start) start.setHours(0, 0, 0, 0);\n if (end) end.setHours(23, 59, 59, 999);\n return { start, end };\n }\n\n /**\n * Maps a date range filter to a date range value like 'thisWeek', 'lastMonth', etc.\n * @param rangeValue the range value\n * @returns the date range (eg. 'thisWeek', 'lastMonth', etc.)\n */\n static getMatchingDateRange(rangeValue: RangeValue): DateRange | undefined {\n return SearchUtils.dateRanges.find((dateRange) => {\n const { start, end } = SearchUtils.dateRangeStartEnd(dateRange as DateRange);\n return (rangeValue.firstValue as Date).toISOString() === start.toISOString() && (rangeValue.secondValue as Date).toISOString() === end.toISOString();\n }) as DateRange;\n }\n\n // Files size ranges\n static getMatchingFilesizeRange(rangeValue: RangeValue): FilesizeRange | undefined {\n let filesizeRange: FilesizeRange | undefined = undefined;\n if (rangeValue.operator === Operator.INTERVAL_INCLUDE_BOTH) {\n if (rangeValue.firstValue === 1024 * 1024 && rangeValue.secondValue === 1024 * 1024 * 10) filesizeRange = 'medium';\n else if (rangeValue.firstValue === 1024 * 1024 * 10 && rangeValue.secondValue === 1024 * 1024 * 100) filesizeRange = 'large';\n } else if (rangeValue.operator === Operator.LESS_THAN) {\n if (rangeValue.firstValue === 1024 * 1024) filesizeRange = 'small';\n } else if (rangeValue.operator === Operator.GREATER_THAN) {\n if (rangeValue.firstValue === 1024 * 1024 * 100) filesizeRange = 'verylarge';\n }\n return filesizeRange;\n }\n\n static filesizeRangeToRangeValue(filesizeRange: FilesizeRange): RangeValue | undefined {\n let rv: RangeValue | undefined = undefined;\n switch (filesizeRange) {\n case 'small':\n rv = {\n operator: Operator.LESS_THAN,\n firstValue: 1024 * 1024\n };\n break;\n case 'medium':\n rv = {\n operator: Operator.INTERVAL_INCLUDE_BOTH,\n firstValue: 1024 * 1024,\n secondValue: 1024 * 1024 * 10\n };\n break;\n case 'large':\n rv = {\n operator: Operator.INTERVAL_INCLUDE_BOTH,\n firstValue: 1024 * 1024 * 10,\n secondValue: 1024 * 1024 * 100\n };\n break;\n case 'verylarge':\n rv = {\n operator: Operator.GREATER_THAN,\n firstValue: 1024 * 1024 * 100\n };\n break;\n }\n return rv;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SessionStorageService {\n #TEMP_STORAGE_ENTRIES_KEY = 'yuv.core.sessionstorage.entries';\n\n constructor() {\n this.#clearTemporaryStorageEntries();\n }\n\n /**\n * Add a reference to a temporary localstorage entry that should be cleared when a\n * new browser session starts. In context of forms this will be used to cleanup the\n * layout state of forms (selected tabs etc.) that are stored locally but should only\n * be pesisted for one browser session.\n * @param storageKey Key of the localstorage item\n */\n addTemporaryStorageEntry(storageKey: string) {\n // entries will themselves be stored in localstorage so we can check for entries\n // to be removed once the application starts\n const current = this.#getTemporaryStorageEntries();\n if (!current.includes(storageKey)) localStorage.setItem(this.#TEMP_STORAGE_ENTRIES_KEY, JSON.stringify([...current, storageKey]));\n }\n\n #clearTemporaryStorageEntries() {\n this.#getTemporaryStorageEntries().forEach((e) => localStorage.removeItem(e));\n localStorage.removeItem(this.#TEMP_STORAGE_ENTRIES_KEY);\n }\n\n #getTemporaryStorageEntries(): string[] {\n let res: string[] = [];\n const i = localStorage.getItem(this.#TEMP_STORAGE_ENTRIES_KEY);\n if (i) {\n try {\n const entries: string[] = JSON.parse(i);\n if (Array.isArray(entries)) res = entries;\n } catch (e) {\n console.error(e);\n }\n }\n return res;\n }\n}\n","import { FormControl, FormGroup } from '@angular/forms';\n\nexport type ObjectFormModel = ObjectFormGroup | ObjectFormControlWrapper;\n\nexport class ObjectFormControlWrapper extends FormGroup {\n _eoFormControlWrapper?: YuvFormGroupWrapper;\n}\n\nexport interface YuvFormGroupWrapper {\n /**\n * form control situation (CREATE, EDIT, SEARCH)\n */\n //\n situation: string;\n /**\n * the name of the wrapped form control\n */\n controlName: string;\n}\n\nexport interface YuvFormGroup {\n /**\n * the label for the form group\n */\n label?: string;\n /**\n * object holding properties defining layout properties of the group\n */\n //\n layout: any;\n /**\n * type of group indicating if the form is a stack, a fieldset or a simple group\n */\n type: string;\n}\n\n/**\n * @ignore\n * Extension of the default angular form group,\n */\nexport class ObjectFormGroup extends FormGroup {\n public _eoFormGroup?: YuvFormGroup;\n}\n/**\n * @ignore\n * Extension of the default angular form control,\n */\nexport class ObjectFormControl extends FormControl {\n private __eoFormElement: any;\n\n public set _eoFormElement(v) {\n this.__eoFormElement = v;\n }\n\n public get _eoFormElement() {\n return this.__eoFormElement;\n }\n}\n\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, switchMap } from 'rxjs';\nimport { BackendService } from '../backend/backend.service';\n\n/**\n * Service providing user related remote storage. This service is used load and\n * store user related data from any device.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class UserStorageService {\n #backend = inject(BackendService);\n\n #USERS_SETTINGS = '/users/settings';\n // prefix to be added to every section key to be able to later distinguish\n // between user settings and other settings\n #SECTION_PREFIX = 'x-user-';\n\n /**\n *\n * @param section section key for\n * @param value value to be stored\n */\n getItem(section: string): Observable<Record<string, any> | undefined> {\n return this.#backend.get(`${this.#USERS_SETTINGS}/${this.#sanitizeSection(this.#SECTION_PREFIX + section)}`);\n }\n\n setItem(section: string, data: Record<string, any>): Observable<any> {\n return this.getItem(section).pipe(\n switchMap((current) => this.#backend.post(`${this.#USERS_SETTINGS}/${this.#sanitizeSection(this.#SECTION_PREFIX + section)}`, { ...current, ...data }))\n );\n }\n\n #sanitizeSection(section: string) {\n return encodeURIComponent(section);\n }\n}\n","import { CurrencyPipe, DecimalPipe, PercentPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * @ignore\n */\n@Pipe({\n name: 'localeDecimal',\n standalone: true\n})\nexport class LocaleDecimalPipe extends DecimalPipe implements PipeTransform {\n constructor(public translate: TranslateService) {\n super(translate.currentLang || 'en');\n }\n\n public override transform(value: any, digits?: string, locale?: string): string | null | any {\n return super.transform(value, digits, locale || this.translate.currentLang || 'en');\n }\n}\n\n/**\n * @ignore\n */\n@Pipe({\n name: 'localePercent',\n pure: false,\n standalone: true\n})\nexport class LocalePercentPipe extends PercentPipe implements PipeTransform {\n constructor(public translate: TranslateService) {\n super(translate.currentLang || 'en');\n }\n\n public override transform(value: any, digits?: string, locale?: string): string | null | any {\n return super.transform(value, digits, locale || this.translate.currentLang || 'en');\n }\n}\n\n/**\n * @ignore\n */\n@Pipe({\n name: 'localeCurrency',\n standalone: true\n})\nexport class LocaleCurrencyPipe extends CurrencyPipe implements PipeTransform {\n constructor(public translate: TranslateService) {\n super(translate.currentLang || 'en');\n }\n\n public override transform(\n value: any,\n currencyCode?: string,\n display?: 'code' | 'symbol' | 'symbol-narrow' | boolean,\n digits?: string,\n locale?: string\n ): string | null | any {\n return super.transform(value, currencyCode, display, digits, locale || this.translate.currentLang || 'en');\n }\n}\n\n@Pipe({\n name: 'localeNumber',\n standalone: true\n})\nexport class LocaleNumberPipe implements PipeTransform {\n decimalPipe;\n decimalSeparator = '.';\n separator = ',';\n\n constructor(public translate: TranslateService) {\n this.decimalPipe = new LocaleDecimalPipe(this.translate);\n this.updateSeparators(this.translate.currentLang);\n }\n\n public transform(value: any, grouping?: boolean, pattern?: string, scale?: number, digits?: string, locale?: string): string | null {\n value = Array.isArray(value) ? value[0] : value;\n let number = this.decimalPipe.transform(value, digits, locale);\n if (number && !grouping) {\n number = number.replace(new RegExp('\\\\' + this.separator, 'g'), '');\n }\n return number ? (pattern || '{{number}}').replace('{{number}}', number) : number;\n }\n\n private updateSeparators(lang: string) {\n if (lang) {\n const pattern = this.decimalPipe.transform(1111.11, '1.2-2', lang);\n this.decimalSeparator = pattern[5];\n this.separator = pattern[1];\n }\n }\n\n stringToNumber(value: string) {\n value = (value || '').replace(new RegExp('\\\\' + this.separator + \"|\\\\s|'| \", 'g'), '').replace(this.decimalSeparator, '.');\n if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {\n return Number(value);\n }\n return NaN;\n }\n\n numberToString(value: number, grouping?: boolean, pattern?: string, scale?: number) {\n value = Array.isArray(value) ? value[0] : value;\n scale = typeof scale === 'number' ? scale : 2;\n return this.transform(value, grouping, pattern as string, scale, `1.${scale}-${scale}`);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocaleNumberPipe } from './locale-number.pipe';\n\n/**\n * This pipe transforms its input (supposed to be a file size in bytes) into a more\n * human readable format like for example 1MB or 200KB.\n *\n * @example\n * <div *ngFor=\"let size of file | fileSize\">...</div>\n */\n@Pipe({ name: 'fileSize', standalone: true })\nexport class FileSizePipe extends LocaleNumberPipe implements PipeTransform {\n private k = 1024;\n private sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n override transform(bytes = 0): string {\n if (bytes <= 1) {\n return bytes === 1 ? '1 Byte' : '0 Bytes';\n }\n let i: number = Math.floor(Math.log(bytes) / Math.log(this.k));\n return super.transform(parseFloat((bytes / Math.pow(this.k, i)).toFixed(2))) + ' ' + this.sizes[i];\n }\n\n override stringToNumber(value: string) {\n const sizes = this.sizes.map((s) => s.toLowerCase());\n const match = value.toLowerCase().match(new RegExp(`(.*)(${sizes.join('|')})`));\n const number = super.stringToNumber((match ? match[1] : value).trim());\n return isNaN(number) ? number : Math.round(number * Math.pow(1024, match ? sizes.indexOf(match[2]) : 0));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\ntype Formats = 'short' | 'medium' | 'shortDate';\n\nconst predefinedFormats: Record<Formats, Intl.DateTimeFormatOptions> = {\n short: {\n timeStyle: 'short',\n dateStyle: 'short'\n },\n medium: {\n timeStyle: 'medium',\n dateStyle: 'medium'\n },\n shortDate: {\n dateStyle: 'short'\n }\n};\n\n@Pipe({\n name: 'localeDate',\n standalone: true\n})\nexport class LocaleDatePipe implements PipeTransform {\n constructor(public translate: TranslateService) {}\n\n transform(value: string | number | Date | undefined, format: Formats = 'short') {\n if (!value) return '';\n else {\n try {\n return new Intl.DateTimeFormat(this.translate.currentLang, predefinedFormats[format] as Intl.DateTimeFormatOptions).format(\n !(value instanceof Date) ? new Date(value) : value\n );\n } catch (e) {\n console.error(e);\n return '';\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml, SafeResourceUrl } from '@angular/platform-browser';\n\n/**\n * This pipe bypass security and trust the given value to be safe HTML.\n * Only use this when the bound HTML is unsafe (e.g. contains script tags and the code should be executed.).\n * @example\n * <div [innerHtml]=\"value | safeHtml\"></div>\n */\n@Pipe({ name: 'safeHtml', standalone: true })\nexport class SafeHtmlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) { }\n\n transform(style: any): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(style);\n }\n}\n/**\n * This pipe bypass security and trust the given value to be a safe style URL, i.e. a value that can be used in hyperlinks or img src.\n * @example\n * <iframe [src]=\"previewSrc | safeUrl\"></iframe>\n */\n@Pipe({ name: 'safeUrl', standalone: true })\nexport class SafeUrlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) { }\n\n public transform(url: any): SafeResourceUrl {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n/**\n * @ignore\n */\n@Pipe({ name: 'keys', pure: false, standalone: true })\nexport class KeysPipe implements PipeTransform {\n transform(value: any): any {\n return Object.keys(value);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NativeNotificationOptions } from './native-notifications.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NativeNotificationService {\n requestPermission(): void {\n if ('Notification' in window) {\n Notification.requestPermission().then((permission) => {\n if (permission === 'granted') {\n console.log('Notification permission granted.');\n } else {\n console.log('Notification permission denied.');\n }\n });\n } else {\n console.log('Notifications are not supported in this browser.');\n }\n }\n\n showNotification(title: string, options?: NativeNotificationOptions): void {\n const preventBecauseTabActive = options?.preventOnTabActive && document.visibilityState === 'visible';\n if ('Notification' in window && Notification.permission === 'granted' && !preventBecauseTabActive) {\n const n = new Notification(title, options?.options);\n n.onclick = (e) => { \n window.focus();\n if(options?.onClick) options.onClick();\n n.close();\n };\n }\n }\n}\n","import { HttpErrorResponse, HttpEvent, HttpHandlerFn, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { UserService } from '../user/user.service';\nimport { AuthService } from './auth.service';\n/**\n * Prevent app from running into 401 issues related to gateway timeouts.\n */\n\nexport function AuthInterceptorFnc(req: HttpRequest<unknown>, next: HttpHandlerFn): Observable<HttpEvent<unknown>> {\n const userService = inject(UserService);\n const auth = inject(AuthService);\n\n return next(req).pipe(\n tap({\n next: (event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n // do stuff with response if you want\n }\n },\n error: (error: any) => {\n if (error instanceof HttpErrorResponse || error.isHttpErrorResponse) {\n if (error.status === 401) {\n auth.logout();\n userService.logout();\n }\n }\n }\n })\n );\n}\n","import { HttpEvent, HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n/**\n * Http Offline interceptor trys to serving offline content for method/url\n */\n\nexport function OfflineInterceptorFnc(req: HttpRequest<unknown>, next: HttpHandlerFn): Observable<HttpEvent<unknown>> {\n return next(req);\n}\n","import { MissingTranslationHandler, MissingTranslationHandlerParams } from '@ngx-translate/core';\n\n/**\n * Handles missing translations\n * @ignore\n */\nexport class EoxMissingTranslationHandler implements MissingTranslationHandler {\n handle(params: MissingTranslationHandlerParams) {\n return '!missing key: ' + params.key;\n }\n}","/**\n * i18n packages\n */\nimport { registerLocaleData } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport localeAr from '@angular/common/locales/ar';\nimport localeBn from '@angular/common/locales/bn';\nimport localeDe from '@angular/common/locales/de';\nimport localeDeCh from '@angular/common/locales/de-CH';\nimport localeEs from '@angular/common/locales/es';\nimport localeExtraAr from '@angular/common/locales/extra/ar';\nimport localeExtraBn from '@angular/common/locales/extra/bn';\nimport localeExtraDe from '@angular/common/locales/extra/de';\nimport localeExtraDeCh from '@angular/common/locales/extra/de-CH';\nimport localeExtraEs from '@angular/common/locales/extra/es';\nimport localeExtraFi from '@angular/common/locales/extra/fi';\nimport localeExtraFr from '@angular/common/locales/extra/fr';\nimport localeExtraHi from '@angular/common/locales/extra/hi';\nimport localeExtraIt from '@angular/common/locales/extra/it';\nimport localeExtraJa from '@angular/common/locales/extra/ja';\nimport localeExtraKo from '@angular/common/locales/extra/ko';\nimport localeExtraLv from '@angular/common/locales/extra/lv';\nimport localeExtraNb from '@angular/common/locales/extra/nb';\nimport localeExtraNl from '@angular/common/locales/extra/nl';\nimport localeExtraPl from '@angular/common/locales/extra/pl';\nimport localeExtraPt from '@angular/common/locales/extra/pt';\nimport localeExtraRu from '@angular/common/locales/extra/ru';\nimport localeExtraSk from '@angular/common/locales/extra/sk';\nimport localeExtraSv from '@angular/common/locales/extra/sv';\nimport localeExtraTh from '@angular/common/locales/extra/th';\nimport localeExtraTr from '@angular/common/locales/extra/tr';\nimport localeExtraUk from '@angular/common/locales/extra/uk';\nimport localeExtraVi from '@angular/common/locales/extra/vi';\nimport localeExtraZh from '@angular/common/locales/extra/zh';\nimport localeFi from '@angular/common/locales/fi';\nimport localeFr from '@angular/common/locales/fr';\nimport localeHi from '@angular/common/locales/hi';\nimport localeIt from '@angular/common/locales/it';\nimport localeJa from '@angular/common/locales/ja';\nimport localeKo from '@angular/common/locales/ko';\nimport localeLv from '@angular/common/locales/lv';\nimport localeNb from '@angular/common/locales/nb';\nimport localeNl from '@angular/common/locales/nl';\nimport localePl from '@angular/common/locales/pl';\nimport localePt from '@angular/common/locales/pt';\nimport localeRu from '@angular/common/locales/ru';\nimport localeSk from '@angular/common/locales/sk';\nimport localeSv from '@angular/common/locales/sv';\nimport localeTh from '@angular/common/locales/th';\nimport localeTr from '@angular/common/locales/tr';\nimport localeUk from '@angular/common/locales/uk';\nimport localeVi from '@angular/common/locales/vi';\nimport localeZh from '@angular/common/locales/zh';\nimport { Inject } from '@angular/core';\nimport { TranslateLoader } from '@ngx-translate/core';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { Utils } from '../../util/utils';\nimport { CoreConfig } from '../config/core-config';\nimport { CORE_CONFIG } from '../config/core-config.tokens';\n\n/**\n * Loader that fetches translations based on the configured locations\n * @ignore\n */\nexport class EoxTranslateJsonLoader implements TranslateLoader {\n constructor(\n public http: HttpClient,\n @Inject(CORE_CONFIG) public config: CoreConfig\n ) {\n registerLocaleData(localeDe, 'de', localeExtraDe); // German\n registerLocaleData(localeAr, 'ar', localeExtraAr); // Arabic\n registerLocaleData(localeEs, 'es', localeExtraEs); // Spanish\n registerLocaleData(localePt, 'pt', localeExtraPt); // Portuguese\n registerLocaleData(localeFr, 'fr', localeExtraFr); // French\n registerLocaleData(localeZh, 'zh', localeExtraZh); // Chinese\n registerLocaleData(localeLv, 'lv', localeExtraLv); // Latvian\n registerLocaleData(localeRu, 'ru', localeExtraRu); // Russian\n registerLocaleData(localeIt, 'it', localeExtraIt); // Italian\n registerLocaleData(localeSk, 'sk', localeExtraSk); // Slovak\n registerLocaleData(localePl, 'pl', localeExtraPl); // Polish\n registerLocaleData(localeUk, 'uk', localeExtraUk); // Ukrainian\n registerLocaleData(localeJa, 'ja', localeExtraJa); // Japanese\n registerLocaleData(localeKo, 'ko', localeExtraKo); // Korean\n registerLocaleData(localeHi, 'hi', localeExtraHi); // Hindi\n registerLocaleData(localeBn, 'bn', localeExtraBn); // Bengalese\n registerLocaleData(localeVi, 'vi', localeExtraVi); // Vietnamese\n registerLocaleData(localeTr, 'tr', localeExtraTr); // Turkish\n registerLocaleData(localeNl, 'nl', localeExtraNl); // Dutch\n registerLocaleData(localeNb, 'nb', localeExtraNb); // Norwegian\n registerLocaleData(localeTh, 'th', localeExtraTh); // Thai\n registerLocaleData(localeFi, 'fi', localeExtraFi); // Finnish\n registerLocaleData(localeSv, 'sv', localeExtraSv); // Swedish\n registerLocaleData(localeDeCh, 'de-CH', localeExtraDeCh); // German Swiss\n }\n\n /**\n *\n * @param string lang\n * @returns Observable<Object>\n */\n getTranslation(lang: string): Observable<Record<string, string>> {\n const t = (this.config.translations || []).map((path) => this.loadTranslationFile(path, lang));\n return forkJoin(t).pipe(map((res) => res.reduce((acc, x) => Object.assign(acc, x), {})));\n }\n\n private loadTranslationFile(path: string, lang: string): Observable<any> {\n return this.http.get(`${Utils.getBaseHref()}${path}${lang}.json`).pipe(\n catchError(() => {\n // ISO codes with more than 2 characters are sub-languages like de-CH.\n // If there is no translation file for that sub-language we'll try to load\n // the file for the base language (in this case de).\n return lang.length > 2 ? this.loadTranslationFile(path, lang.substring(0, 2)) : of({});\n })\n );\n }\n}\n","import { HttpClient, provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { EnvironmentProviders, importProvidersFrom, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\nimport { MissingTranslationHandler, TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { AuthInterceptorFnc } from './service/auth/auth.interceptor';\nimport { CoreConfig } from './service/config/core-config';\nimport { CORE_CONFIG, CUSTOM_CONFIG } from './service/config/core-config.tokens';\nimport { OfflineInterceptorFnc } from './service/connection/offline.interceptor';\nimport { init_moduleFnc } from './service/core-init/core-init.service';\nimport { EoxMissingTranslationHandler } from './service/core-init/missing-translation-handler';\nimport { EoxTranslateJsonLoader } from './service/core-init/translate-json-loader';\nimport { CUSTOM_EVENTS, CUSTOM_EVENTS_TRUSTED_ORIGINS } from './service/event/custom.events.token';\n\nexport interface YuvClientCoreConfig {\n translations: string[];\n}\n\nexport const provideYuvClientCore = (\n options: YuvClientCoreConfig = { translations: [] },\n customEvents?: string[],\n customEventsTrustedOrigin?: string[]\n): EnvironmentProviders => {\n return makeEnvironmentProviders([\n importProvidersFrom(TranslateModule.forRoot()),\n provideHttpClient(withInterceptors([AuthInterceptorFnc, OfflineInterceptorFnc])),\n\n { provide: CORE_CONFIG, useClass: CoreConfig, deps: [CUSTOM_CONFIG] },\n provideAppInitializer(init_moduleFnc),\n /**\n * overriding translate modules defaults\n * this works because providers are singletons\n */\n {\n provide: TranslateLoader,\n useClass: EoxTranslateJsonLoader,\n deps: [HttpClient, CORE_CONFIG]\n },\n {\n provide: MissingTranslationHandler,\n useClass: EoxMissingTranslationHandler\n },\n {\n provide: CUSTOM_CONFIG,\n useValue: {\n ...CUSTOM_CONFIG,\n translations: options.translations\n }\n }\n ]);\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableEmpty","i1.ConfigService","i1.BackendService","i2","i3.Logger","i4.SystemService","i5.EventService","i6.ConfigService","tap","map","filter","i1.PendingChangesService","switchMap","i1"],"mappings":"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"}
|