12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- import { computed, type Ref, type WritableComputedRef } from 'vue'
- import {
- EnumSecurityStateType,
- type FieldSecurityContext,
- type SecurityOption,
- type SecurityValue,
- } from './types.ts'
- import type { FormFieldContext } from '../../types/field.ts'
- export const useFieldSecurity = (
- context: Ref<FormFieldContext<FieldSecurityContext>>,
- localValue: WritableComputedRef<SecurityValue>,
- ) => {
- const securityMethods = computed(() => {
- return Object.keys(context.value.securityAllowed || {}).sort((a) => {
- if (a === EnumSecurityStateType.Pgp) return -1
- if (a === EnumSecurityStateType.Smime) return 1
- return 0
- }) as EnumSecurityStateType[]
- })
- const previewMethod = computed(
- () =>
- localValue.value?.method ??
- // smime should have priority
- (securityMethods.value.find(
- (value) => value === EnumSecurityStateType.Smime,
- ) ||
- securityMethods.value[0]),
- )
- const isCurrentSecurityOption = (option: SecurityOption) =>
- !!localValue.value?.options.includes(option)
- const isSecurityOptionDisabled = (option: SecurityOption) =>
- context.value.disabled ||
- !context.value.securityAllowed?.[previewMethod.value]?.includes(option)
- const defaultOptions = (method: EnumSecurityStateType) =>
- context.value.securityDefaultOptions?.[method] || []
- const filterOptions = (
- method: EnumSecurityStateType,
- options: SecurityOption[],
- ) => {
- return options
- .filter((option) =>
- context.value.securityAllowed?.[method]?.includes(option),
- )
- .sort()
- }
- const changeSecurityState = (method: EnumSecurityStateType) => {
- // Reset the default behavior of the chosen method and remove unsupported options.
- const newOptions = filterOptions(method, defaultOptions(method))
- localValue.value = {
- method,
- options: newOptions,
- }
- }
- return {
- securityMethods,
- previewMethod,
- isCurrentSecurityOption,
- isSecurityOptionDisabled,
- changeSecurityState,
- }
- }
|