{"version":3,"file":"definedValueFieldComponents.js","sources":["../../../Framework/FieldTypes/definedValueField.partial.ts","../../../Framework/FieldTypes/definedValueFieldComponents.ts"],"sourcesContent":["// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\nimport { Component } from \"vue\";\r\nimport { defineAsyncComponent } from \"@Obsidian/Utility/component\";\r\nimport { ComparisonType } from \"@Obsidian/Enums/Reporting/comparisonType\";\r\nimport { containsComparisonTypes } from \"@Obsidian/Core/Reporting/comparisonType\";\r\nimport { ComparisonValue } from \"@Obsidian/Types/Reporting/comparisonValue\";\r\nimport { asBoolean } from \"@Obsidian/Utility/booleanUtils\";\r\nimport { FieldTypeBase } from \"./fieldType\";\r\nimport { getStandardFilterComponent } from \"./utils\";\r\n\r\n/**\r\n * The key names for the configuration properties available when editing the\r\n * configuration of a DefinedValue field type.\r\n */\r\nexport const enum ConfigurationPropertyKey {\r\n /** The defined types available to be picked. */\r\n DefinedTypes = \"definedTypes\",\r\n\r\n /** The defined values available to be picked. */\r\n DefinedValues = \"definedValues\"\r\n}\r\n\r\n/**\r\n * The configuration value keys used by the configuraiton and edit controls.\r\n */\r\nexport const enum ConfigurationValueKey {\r\n /** The unique identifier of the defined type currently selected. */\r\n DefinedType = \"definedtype\",\r\n\r\n /**\r\n * The unique identifiers of the defined values that can be selected\r\n * during editing.\r\n */\r\n Values = \"values\",\r\n\r\n /**\r\n * Contains \"True\" if the edit control should be rendered to allow\r\n * selecting multiple values.\r\n */\r\n AllowMultiple = \"allowmultiple\",\r\n\r\n /**\r\n * Contains \"True\" if the edit control should display descriptions instead\r\n * of values.\r\n */\r\n DisplayDescription = \"displaydescription\",\r\n\r\n /**\r\n * Contains \"True\" if the edit control should use enhanced selection.\r\n */\r\n EnhancedSelection = \"enhancedselection\",\r\n\r\n /** Contains \"True\" if in-active values should be included. */\r\n IncludeInactive = \"includeInactive\",\r\n\r\n /** A comma separated list of selectable value identifiers. */\r\n SelectableValues = \"selectableValues\",\r\n\r\n /** Contains \"True\" if adding new values is permitted. */\r\n AllowAddingNewValues = \"AllowAddingNewValues\",\r\n\r\n /** The number of columns to use when multiple selection is allowed. */\r\n RepeatColumns = \"RepeatColumns\"\r\n}\r\n\r\nexport type ValueItem = {\r\n value: string,\r\n text: string,\r\n description: string\r\n};\r\n\r\nexport type ClientValue = {\r\n value: string,\r\n text: string,\r\n description: string\r\n};\r\n\r\n\r\n// The edit component can be quite large, so load it only as needed.\r\nconst editComponent = defineAsyncComponent(async () => {\r\n return (await import(\"./definedValueFieldComponents\")).EditComponent;\r\n});\r\n\r\n// The configuration component can be quite large, so load it only as needed.\r\nconst configurationComponent = defineAsyncComponent(async () => {\r\n return (await import(\"./definedValueFieldComponents\")).ConfigurationComponent;\r\n});\r\n\r\n// Load the filter component only as needed.\r\nconst filterComponent = defineAsyncComponent(async () => {\r\n return (await import(\"./definedValueFieldComponents\")).FilterComponent;\r\n});\r\n\r\n/**\r\n * The field type handler for the Defined Value field.\r\n */\r\nexport class DefinedValueFieldType extends FieldTypeBase {\r\n public override getTextValue(value: string, configurationValues: Record): string {\r\n try {\r\n const clientValue = JSON.parse(value ?? \"\") as ClientValue;\r\n\r\n try {\r\n const values = JSON.parse(configurationValues[ConfigurationValueKey.Values] ?? \"[]\") as ValueItem[];\r\n const displayDescription = asBoolean(configurationValues[ConfigurationValueKey.DisplayDescription]);\r\n const rawValues = clientValue.value.split(\",\");\r\n\r\n return values.filter(v => rawValues.includes(v.value))\r\n .map(v => displayDescription && v.description ? v.description : v.text)\r\n .join(\", \");\r\n }\r\n catch {\r\n return clientValue.value;\r\n }\r\n }\r\n catch {\r\n return \"\";\r\n }\r\n }\r\n\r\n public override getEditComponent(): Component {\r\n return editComponent;\r\n }\r\n\r\n public override getConfigurationComponent(): Component {\r\n return configurationComponent;\r\n }\r\n\r\n public override getSupportedComparisonTypes(): ComparisonType {\r\n return containsComparisonTypes;\r\n }\r\n\r\n public override getFilterValueText(value: ComparisonValue, configurationValues: Record): string {\r\n try {\r\n const clientValue = JSON.parse(value.value ?? \"\") as ClientValue;\r\n\r\n const values = JSON.parse(configurationValues?.[ConfigurationValueKey.Values] ?? \"[]\") as ValueItem[];\r\n const useDescription = asBoolean(configurationValues?.[ConfigurationValueKey.DisplayDescription]);\r\n const rawValues = clientValue.value.split(\",\");\r\n\r\n const text = values.filter(v => rawValues.includes(v.value))\r\n .map(v => useDescription ? v.description : v.text)\r\n .join(\"' OR '\");\r\n\r\n return text ? `'${text}'` : \"\";\r\n }\r\n catch {\r\n return \"\";\r\n }\r\n }\r\n\r\n public override getFilterComponent(): Component {\r\n return getStandardFilterComponent(this.getSupportedComparisonTypes(), filterComponent);\r\n }\r\n\r\n public override doesValueMatchFilter(value: string, filterValue: ComparisonValue, _configurationValues: Record): boolean {\r\n const clientValue = JSON.parse(value || \"{}\") as ClientValue;\r\n const selectedValues = (filterValue.value ?? \"\").split(\",\").filter(v => v !== \"\").map(v => v.toLowerCase());\r\n let comparisonType = filterValue.comparisonType;\r\n\r\n if (comparisonType === ComparisonType.EqualTo) {\r\n // Treat EqualTo as if it were Contains.\r\n comparisonType = ComparisonType.Contains;\r\n }\r\n else if (comparisonType === ComparisonType.NotEqualTo) {\r\n // Treat NotEqualTo as if it were DoesNotContain.\r\n comparisonType = ComparisonType.DoesNotContain;\r\n }\r\n\r\n if (comparisonType === ComparisonType.IsBlank) {\r\n return (clientValue.value ?? \"\") === \"\";\r\n }\r\n else if (comparisonType === ComparisonType.IsNotBlank) {\r\n return (clientValue.value ?? \"\") !== \"\";\r\n }\r\n\r\n if (selectedValues.length > 0) {\r\n const userValues = (clientValue.value ?? \"\").toLowerCase().split(\",\").filter(v => v !== \"\");\r\n\r\n if (comparisonType === ComparisonType.Contains) {\r\n let matchedCount = 0;\r\n\r\n for (const userValue of userValues) {\r\n if (selectedValues.includes(userValue)) {\r\n matchedCount += 1;\r\n }\r\n }\r\n\r\n return matchedCount > 0;\r\n }\r\n else {\r\n let matchedCount = 0;\r\n\r\n for (const userValue of userValues) {\r\n if (selectedValues.includes(userValue)) {\r\n matchedCount += 1;\r\n }\r\n }\r\n\r\n return matchedCount !== selectedValues.length;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\nimport { computed, defineComponent, inject, PropType, ref, watch } from \"vue\";\r\nimport CheckBox from \"@Obsidian/Controls/checkBox\";\r\nimport CheckBoxList from \"@Obsidian/Controls/checkBoxList\";\r\nimport DropDownList from \"@Obsidian/Controls/dropDownList\";\r\nimport NumberBox from \"@Obsidian/Controls/numberBox\";\r\nimport { asBoolean, asTrueFalseOrNull } from \"@Obsidian/Utility/booleanUtils\";\r\nimport { toNumber, toNumberOrNull } from \"@Obsidian/Utility/numberUtils\";\r\nimport { useVModelPassthrough } from \"@Obsidian/Utility/component\";\r\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\nimport { ClientValue, ConfigurationPropertyKey, ConfigurationValueKey, ValueItem } from \"./definedValueField.partial\";\r\nimport { getFieldEditorProps } from \"./utils\";\r\n\r\nfunction parseModelValue(modelValue: string | undefined): string {\r\n try {\r\n const clientValue = JSON.parse(modelValue ?? \"\") as ClientValue;\r\n\r\n return clientValue.value;\r\n }\r\n catch {\r\n return \"\";\r\n }\r\n}\r\n\r\nfunction getClientValue(value: string | string[], valueOptions: ValueItem[]): ClientValue {\r\n const values = Array.isArray(value) ? value : [value];\r\n const selectedValues = valueOptions.filter(v => values.includes(v.value));\r\n\r\n if (selectedValues.length >= 1) {\r\n return {\r\n value: selectedValues.map(v => v.value).join(\",\"),\r\n text: selectedValues.map(v => v.text).join(\", \"),\r\n description: selectedValues.map(v => v.description).join(\", \")\r\n };\r\n }\r\n else {\r\n return {\r\n value: \"\",\r\n text: \"\",\r\n description: \"\"\r\n };\r\n }\r\n}\r\n\r\nexport const EditComponent = defineComponent({\r\n name: \"DefinedValueField.Edit\",\r\n\r\n components: {\r\n DropDownList,\r\n CheckBoxList\r\n },\r\n\r\n props: getFieldEditorProps(),\r\n\r\n setup(props, { emit }) {\r\n const internalValue = ref(parseModelValue(props.modelValue));\r\n const internalValues = ref(parseModelValue(props.modelValue).split(\",\").filter(v => v !== \"\"));\r\n\r\n const valueOptions = computed((): ValueItem[] => {\r\n try {\r\n return JSON.parse(props.configurationValues[ConfigurationValueKey.Values] ?? \"[]\") as ValueItem[];\r\n }\r\n catch {\r\n return [];\r\n }\r\n });\r\n\r\n const displayDescription = computed((): boolean => asBoolean(props.configurationValues[ConfigurationValueKey.DisplayDescription]));\r\n\r\n /** The options to choose from */\r\n const options = computed((): ListItemBag[] => {\r\n return valueOptions.value.map(v => {\r\n return {\r\n text: displayDescription.value ? (v.description || v.text) : v.text,\r\n value: v.value\r\n };\r\n });\r\n });\r\n\r\n const isMultiple = computed((): boolean => asBoolean(props.configurationValues[ConfigurationValueKey.AllowMultiple]));\r\n\r\n const configAttributes = computed((): Record => {\r\n const attributes: Record = {};\r\n\r\n const enhancedConfig = props.configurationValues[ConfigurationValueKey.EnhancedSelection];\r\n if (enhancedConfig) {\r\n attributes.enhanceForLongLists = asBoolean(enhancedConfig);\r\n }\r\n\r\n return attributes;\r\n });\r\n\r\n /** The number of columns wide the checkbox list will be. */\r\n const repeatColumns = computed((): number => toNumber(props.configurationValues[ConfigurationValueKey.RepeatColumns]));\r\n\r\n watch(() => props.modelValue, () => {\r\n internalValue.value = parseModelValue(props.modelValue);\r\n internalValues.value = parseModelValue(props.modelValue).split(\",\").filter(v => v !== \"\");\r\n });\r\n\r\n watch(() => internalValue.value, () => {\r\n if (!isMultiple.value) {\r\n const clientValue = getClientValue(internalValue.value, valueOptions.value);\r\n\r\n emit(\"update:modelValue\", JSON.stringify(clientValue));\r\n }\r\n });\r\n\r\n watch(() => internalValues.value, () => {\r\n if (isMultiple.value) {\r\n const clientValue = getClientValue(internalValues.value, valueOptions.value);\r\n\r\n emit(\"update:modelValue\", JSON.stringify(clientValue));\r\n }\r\n });\r\n\r\n return {\r\n configAttributes,\r\n internalValue,\r\n internalValues,\r\n isMultiple,\r\n isRequired: inject(\"isRequired\") as boolean,\r\n options,\r\n repeatColumns\r\n };\r\n },\r\n\r\n template: `\r\n\r\n\r\n`\r\n});\r\n\r\nexport const FilterComponent = defineComponent({\r\n name: \"DefinedValueField.Filter\",\r\n\r\n components: {\r\n EditComponent\r\n },\r\n\r\n props: getFieldEditorProps(),\r\n\r\n setup(props, { emit }) {\r\n const internalValue = useVModelPassthrough(props, \"modelValue\", emit);\r\n\r\n const configurationValues = ref({ ...props.configurationValues });\r\n configurationValues.value[ConfigurationValueKey.AllowMultiple] = \"True\";\r\n\r\n watch(() => props.configurationValues, () => {\r\n configurationValues.value = { ...props.configurationValues };\r\n configurationValues.value[ConfigurationValueKey.AllowMultiple] = \"True\";\r\n });\r\n\r\n return {\r\n internalValue,\r\n configurationValues\r\n };\r\n },\r\n\r\n template: `\r\n\r\n`\r\n});\r\n\r\nexport const ConfigurationComponent = defineComponent({\r\n name: \"DefinedValueField.Configuration\",\r\n\r\n components: {\r\n DropDownList,\r\n CheckBoxList,\r\n CheckBox,\r\n NumberBox\r\n },\r\n\r\n props: {\r\n modelValue: {\r\n type: Object as PropType>,\r\n required: true\r\n },\r\n configurationProperties: {\r\n type: Object as PropType>,\r\n required: true\r\n }\r\n },\r\n\r\n setup(props, { emit }) {\r\n // Define the properties that will hold the current selections.\r\n const definedTypeValue = ref(\"\");\r\n const allowMultipleValues = ref(false);\r\n const displayDescriptions = ref(false);\r\n const enhanceForLongLists = ref(false);\r\n const includeInactive = ref(false);\r\n const repeatColumns = ref(null);\r\n const selectableValues = ref([]);\r\n\r\n /** The defined types that are available to be selected from. */\r\n const definedTypeItems = ref([]);\r\n\r\n /** The defined values that are available to be selected from. */\r\n const definedValueItems = ref([]);\r\n\r\n /** The options to show in the defined type picker. */\r\n const definedTypeOptions = computed((): ListItemBag[] => {\r\n return definedTypeItems.value;\r\n });\r\n\r\n /** The options to show in the selectable values picker. */\r\n const definedValueOptions = computed((): ListItemBag[] => definedValueItems.value);\r\n\r\n /** Determines if we have any defined values to show. */\r\n const hasValues = computed((): boolean => {\r\n return definedValueItems.value.length > 0;\r\n });\r\n\r\n /**\r\n * Update the modelValue property if any value of the dictionary has\r\n * actually changed. This helps prevent unwanted postbacks if the value\r\n * didn't really change - which can happen if multiple values get updated\r\n * at the same time.\r\n *\r\n * @returns true if a new modelValue was emitted to the parent component.\r\n */\r\n const maybeUpdateModelValue = (): boolean => {\r\n const newValue: Record = {\r\n ...props.modelValue\r\n };\r\n\r\n // Construct the new value that will be emitted if it is different\r\n // than the current value.\r\n newValue[ConfigurationValueKey.DefinedType] = definedTypeValue.value;\r\n newValue[ConfigurationValueKey.SelectableValues] = selectableValues.value.join(\",\");\r\n newValue[ConfigurationValueKey.AllowMultiple] = asTrueFalseOrNull(allowMultipleValues.value) ?? \"False\";\r\n newValue[ConfigurationValueKey.DisplayDescription] = asTrueFalseOrNull(displayDescriptions.value) ?? \"False\";\r\n newValue[ConfigurationValueKey.EnhancedSelection] = asTrueFalseOrNull(enhanceForLongLists.value) ?? \"False\";\r\n newValue[ConfigurationValueKey.IncludeInactive] = asTrueFalseOrNull(includeInactive.value) ?? \"False\";\r\n newValue[ConfigurationValueKey.RepeatColumns] = repeatColumns.value?.toString() ?? \"\";\r\n\r\n // Compare the new value and the old value.\r\n const anyValueChanged = newValue[ConfigurationValueKey.DefinedType] !== props.modelValue[ConfigurationValueKey.DefinedType]\r\n || newValue[ConfigurationValueKey.SelectableValues] !== (props.modelValue[ConfigurationValueKey.SelectableValues] ?? \"\")\r\n || newValue[ConfigurationValueKey.AllowMultiple] !== (props.modelValue[ConfigurationValueKey.AllowMultiple] ?? \"False\")\r\n || newValue[ConfigurationValueKey.DisplayDescription] !== (props.modelValue[ConfigurationValueKey.DisplayDescription] ?? \"False\")\r\n || newValue[ConfigurationValueKey.EnhancedSelection] !== (props.modelValue[ConfigurationValueKey.EnhancedSelection] ?? \"False\")\r\n || newValue[ConfigurationValueKey.IncludeInactive] !== (props.modelValue[ConfigurationValueKey.IncludeInactive] ?? \"False\")\r\n || newValue[ConfigurationValueKey.RepeatColumns] !== (props.modelValue[ConfigurationValueKey.RepeatColumns] ?? \"\");\r\n\r\n // If any value changed then emit the new model value.\r\n if (anyValueChanged) {\r\n emit(\"update:modelValue\", newValue);\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n };\r\n\r\n /**\r\n * Emits the updateConfigurationValue if the value has actually changed.\r\n *\r\n * @param key The key that was possibly modified.\r\n * @param value The new value.\r\n */\r\n const maybeUpdateConfiguration = (key: string, value: string): void => {\r\n if (maybeUpdateModelValue()) {\r\n emit(\"updateConfigurationValue\", key, value);\r\n }\r\n };\r\n\r\n // Watch for changes coming in from the parent component and update our\r\n // data to match the new information.\r\n watch(() => [props.modelValue, props.configurationProperties], () => {\r\n const definedTypes = props.configurationProperties[ConfigurationPropertyKey.DefinedTypes];\r\n const definedValues = props.configurationProperties[ConfigurationPropertyKey.DefinedValues];\r\n\r\n definedTypeItems.value = definedTypes ? JSON.parse(props.configurationProperties.definedTypes) as ListItemBag[] : [];\r\n definedValueItems.value = definedValues ? JSON.parse(props.configurationProperties.definedValues) as ListItemBag[] : [];\r\n\r\n definedTypeValue.value = props.modelValue.definedtype;\r\n allowMultipleValues.value = asBoolean(props.modelValue[ConfigurationValueKey.AllowMultiple]);\r\n displayDescriptions.value = asBoolean(props.modelValue[ConfigurationValueKey.DisplayDescription]);\r\n enhanceForLongLists.value = asBoolean(props.modelValue[ConfigurationValueKey.EnhancedSelection]);\r\n includeInactive.value = asBoolean(props.modelValue[ConfigurationValueKey.IncludeInactive]);\r\n repeatColumns.value = toNumberOrNull(props.modelValue[ConfigurationValueKey.RepeatColumns]);\r\n selectableValues.value = (props.modelValue[ConfigurationValueKey.SelectableValues]?.split(\",\") ?? []).filter(s => s !== \"\");\r\n }, {\r\n immediate: true\r\n });\r\n\r\n // Watch for changes in properties that require new configuration\r\n // properties to be retrieved from the server.\r\n watch([definedTypeValue, selectableValues, displayDescriptions, includeInactive], () => {\r\n if (maybeUpdateModelValue()) {\r\n emit(\"updateConfiguration\");\r\n }\r\n });\r\n\r\n // Watch for changes in properties that only require a local UI update.\r\n watch(allowMultipleValues, () => maybeUpdateConfiguration(ConfigurationValueKey.AllowMultiple, asTrueFalseOrNull(allowMultipleValues.value) ?? \"False\"));\r\n watch(enhanceForLongLists, () => maybeUpdateConfiguration(ConfigurationValueKey.EnhancedSelection, asTrueFalseOrNull(enhanceForLongLists.value) ?? \"False\"));\r\n watch(repeatColumns, () => maybeUpdateConfiguration(ConfigurationValueKey.RepeatColumns, repeatColumns.value?.toString() ?? \"\"));\r\n\r\n return {\r\n allowMultipleValues,\r\n definedTypeValue,\r\n definedTypeOptions,\r\n definedTypeItems,\r\n definedValueOptions,\r\n displayDescriptions,\r\n enhanceForLongLists,\r\n hasValues,\r\n includeInactive,\r\n repeatColumns,\r\n selectableValues\r\n };\r\n },\r\n\r\n template: `\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n`\r\n});\r\n"],"names":["ConfigurationPropertyKey","ConfigurationValueKey","defineAsyncComponent","_asyncToGenerator","EditComponent","ConfigurationComponent","FilterComponent","parseModelValue","modelValue","clientValue","JSON","parse","value","_unused","getClientValue","valueOptions","values","Array","isArray","selectedValues","filter","v","includes","length","map","join","text","description","defineComponent","name","components","DropDownList","CheckBoxList","props","getFieldEditorProps","setup","_ref","emit","internalValue","ref","internalValues","split","computed","_props$configurationV","configurationValues","Values","_unused2","displayDescription","asBoolean","DisplayDescription","options","isMultiple","AllowMultiple","configAttributes","attributes","enhancedConfig","EnhancedSelection","enhanceForLongLists","repeatColumns","toNumber","RepeatColumns","watch","stringify","isRequired","inject","template","_ref2","useVModelPassthrough","_objectSpread","CheckBox","NumberBox","type","Object","required","configurationProperties","_ref3","definedTypeValue","allowMultipleValues","displayDescriptions","includeInactive","selectableValues","definedTypeItems","definedValueItems","definedTypeOptions","definedValueOptions","hasValues","maybeUpdateModelValue","_asTrueFalseOrNull","_asTrueFalseOrNull2","_asTrueFalseOrNull3","_asTrueFalseOrNull4","_repeatColumns$value$","_repeatColumns$value","_props$modelValue$Con","_props$modelValue$Con2","_props$modelValue$Con3","_props$modelValue$Con4","_props$modelValue$Con5","_props$modelValue$Con6","newValue","DefinedType","SelectableValues","asTrueFalseOrNull","IncludeInactive","toString","anyValueChanged","maybeUpdateConfiguration","key","_props$modelValue$Con7","_props$modelValue$Con8","definedTypes","DefinedTypes","definedValues","DefinedValues","definedtype","toNumberOrNull","s","immediate","_asTrueFalseOrNull5","_asTrueFalseOrNull6","_repeatColumns$value$2","_repeatColumns$value2"],"mappings":"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"}