{"version":3,"file":"fieldType.js","sources":["../../../Framework/FieldTypes/fieldType.ts"],"sourcesContent":["// <copyright>\n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// </copyright>\n//\n\nimport { Component, computed, defineComponent, PropType } from \"vue\";\nimport { getComparisonName } from \"@Obsidian/Core/Reporting/comparisonType\";\nimport { ComparisonValue } from \"@Obsidian/Types/Reporting/comparisonValue\";\nimport { escapeHtml, truncate } from \"@Obsidian/Utility/stringUtils\";\nimport { EditComponent as TextEditComponent } from \"./textFieldComponents\";\nimport { getFieldEditorProps, getStandardFilterComponent } from \"./utils\";\nimport { IFieldType } from \"@Obsidian/Types/fieldType\";\nimport { ComparisonType } from \"@Obsidian/Enums/Reporting/comparisonType\";\n\n/**\n * Define a simple component that can be used when editing the configuration of\n * a field type that isn't yet supported.\n */\nconst unsupportedFieldTypeConfigurationComponent = defineComponent({\n    props: {\n        modelValue: {\n            type: Object as PropType<Record<string, string>>,\n            required: true\n        },\n\n        configurationProperties: {\n            type: Object as PropType<Record<string, string>>,\n            required: true\n        }\n    },\n\n    setup() {\n        return {};\n    },\n\n    template: `\n<div class=\"alert alert-warning\">\n    Configuration of this field type is not supported.\n</div>\n`\n});\n\n/**\n * Basic field type implementation that is suitable for implementations to\n * extend.\n */\nexport abstract class FieldTypeBase implements IFieldType {\n    public getTextValue(value: string, _configurationValues: Record<string, string>): string {\n        return value ?? \"\";\n    }\n\n    public getHtmlValue(value: string, configurationValues: Record<string, string>, _isEscaped?: boolean): string {\n        return `${escapeHtml(this.getTextValue(value, configurationValues))}`;\n    }\n\n    public getCondensedTextValue(value: string, configurationValues: Record<string, string>): string {\n        return truncate(this.getTextValue(value, configurationValues), 100);\n    }\n\n    public getCondensedHtmlValue(value: string, configurationValues: Record<string, string>, _isEscaped?: boolean): string {\n        return `${escapeHtml(this.getCondensedTextValue(value, configurationValues))}`;\n    }\n\n    public getFormattedComponent(_configurationValues: Record<string, string>): Component {\n        return defineComponent({\n            name: \"FieldType.Formatted\",\n            props: { ...getFieldEditorProps(), isEscaped: Boolean },\n            setup: (props) => {\n                return {\n                    content: computed(() => {\n                        return this.getHtmlValue(props.modelValue ?? \"\", props.configurationValues, props.isEscaped);\n                    })\n                };\n            },\n\n            template: `<div v-html=\"content\"></div>`\n        });\n    }\n\n    public getCondensedFormattedComponent(_configurationValues: Record<string, string>): Component {\n        return defineComponent({\n            name: \"FieldType.CondensedFormatted\",\n            props: { ...getFieldEditorProps(), isEscaped: Boolean },\n            setup: (props) => {\n                return {\n                    content: computed(() => {\n                        return this.getCondensedHtmlValue(props.modelValue ?? \"\", props.configurationValues, props.isEscaped);\n                    })\n                };\n            },\n\n            template: `<span v-html=\"content\"></span>`\n        });\n    }\n\n    public getEditComponent(_configurationValues: Record<string, string>): Component {\n        return TextEditComponent;\n    }\n\n    public getConfigurationComponent(): Component {\n        return unsupportedFieldTypeConfigurationComponent;\n    }\n\n    public hasDefaultComponent(_configurationValues: Record<string, string>): boolean {\n        return true;\n    }\n\n    public isFilterable(_configurationValues: Record<string, string>): boolean {\n        return true;\n    }\n\n    public getSupportedComparisonTypes(_configurationValues: Record<string, string>): ComparisonType {\n        return ComparisonType.EqualTo | ComparisonType.NotEqualTo;\n    }\n\n    public getFilterComponent(configurationValues: Record<string, string>): Component | null {\n        return getStandardFilterComponent(this.getSupportedComparisonTypes(configurationValues), this.getEditComponent(configurationValues));\n    }\n\n    public getFilterValueDescription(value: ComparisonValue, configurationValues: Record<string, string>): string {\n        const valueText = this.getFilterValueText(value, configurationValues);\n\n        if (!value.comparisonType) {\n            return valueText ? `Is ${valueText}` : \"\";\n        }\n\n        if (value.comparisonType === ComparisonType.IsBlank || value.comparisonType === ComparisonType.IsNotBlank) {\n            return getComparisonName(value.comparisonType);\n        }\n\n        if (valueText === \"\") {\n            // If the field type supports IsBlank and we have a blank value and\n            // the selected comparison type is EqualTo or NotEqualTo then perform\n            // special wrapping around the blank value.\n            if (this.getSupportedComparisonTypes(configurationValues) & ComparisonType.IsBlank && (value.comparisonType === ComparisonType.EqualTo || value.comparisonType === ComparisonType.NotEqualTo)) {\n                return `${getComparisonName(value.comparisonType)} ''`;\n            }\n\n            // No value specified basically means no filter.\n            return \"\";\n        }\n\n        return `${getComparisonName(value.comparisonType)} ${valueText}`;\n    }\n\n    public getFilterValueText(value: ComparisonValue, configurationValues: Record<string, string>): string {\n        const text = this.getTextValue(value.value, configurationValues ?? {}) ?? \"\";\n\n        return text ? `'${text}'` : text;\n    }\n\n    public doesValueMatchFilter(value: string, filterValue: ComparisonValue, configurationValues: Record<string, string>): boolean {\n        if (!filterValue.comparisonType) {\n            return false;\n        }\n\n        if (!filterValue.value) {\n            // No comparison value was specified. Attempt to filter on specific\n            // comparison types that don't need a value.\n            if (filterValue.comparisonType === ComparisonType.IsBlank) {\n                return (value ?? \"\") === \"\";\n            }\n            else if (filterValue.comparisonType === ComparisonType.IsNotBlank) {\n                return (value ?? \"\") !== \"\";\n            }\n            else if (this.getSupportedComparisonTypes(configurationValues) & ComparisonType.IsBlank) {\n                // If this filter supports an IsBlank comparison type then\n                // translate \"EqualTo\" and \"NotEqualTo\" to be \"IsBlank\" and\n                // \"IsNotBlank\" respectively.\n                if (filterValue.comparisonType === ComparisonType.EqualTo) {\n                    return (value ?? \"\") === \"\";\n                }\n                else if (filterValue.comparisonType === ComparisonType.NotEqualTo) {\n                    return (value ?? \"\") !== \"\";\n                }\n            }\n\n            return false;\n        }\n\n        const numericFilterValue = parseFloat(filterValue.value);\n        const numericValue = parseFloat(value ?? \"\");\n        const isNumericComparison = !Number.isNaN(numericFilterValue) && !Number.isNaN(numericValue);\n\n        if (filterValue.comparisonType === ComparisonType.Contains) {\n            return (value ?? \"\").toLowerCase().includes(filterValue.value.toLowerCase());\n        }\n        else if (filterValue.comparisonType === ComparisonType.DoesNotContain) {\n            return !(value ?? \"\").toLowerCase().includes(filterValue.value.toLowerCase());\n        }\n        else if (filterValue.comparisonType === ComparisonType.StartsWith) {\n            return (value ?? \"\").toLowerCase().startsWith(filterValue.value.toLowerCase());\n        }\n        else if (filterValue.comparisonType === ComparisonType.EndsWith) {\n            return (value ?? \"\").toLowerCase().endsWith(filterValue.value.toLowerCase());\n        }\n        else if (filterValue.comparisonType === ComparisonType.EqualTo) {\n            return (value ?? \"\").toLowerCase() === filterValue.value.toLowerCase();\n        }\n        else if (filterValue.comparisonType === ComparisonType.NotEqualTo) {\n            return (value ?? \"\").toLowerCase() !== filterValue.value.toLowerCase();\n        }\n        else if (filterValue.comparisonType === ComparisonType.IsBlank) {\n            return (value ?? \"\").toLowerCase().trim() === \"\";\n        }\n        else if (filterValue.comparisonType === ComparisonType.IsNotBlank) {\n            return (value ?? \"\").toLowerCase().trim() !== \"\";\n        }\n        else if (filterValue.comparisonType === ComparisonType.LessThan) {\n            return isNumericComparison\n                ? numericValue < numericFilterValue\n                : (value ?? \"\").toLowerCase() < filterValue.value.toLowerCase();\n        }\n        else if (filterValue.comparisonType === ComparisonType.LessThanOrEqualTo) {\n            return isNumericComparison\n                ? numericValue <= numericFilterValue\n                : (value ?? \"\").toLowerCase() <= filterValue.value.toLowerCase();\n        }\n        else if (filterValue.comparisonType === ComparisonType.GreaterThan) {\n            return isNumericComparison\n                ? numericValue > numericFilterValue\n                : (value ?? \"\").toLowerCase() > filterValue.value.toLowerCase();\n        }\n        else if (filterValue.comparisonType === ComparisonType.GreaterThanOrEqualTo) {\n            return isNumericComparison\n                ? numericValue >= numericFilterValue\n                : (value ?? \"\").toLowerCase() >= filterValue.value.toLowerCase();\n        }\n\n        return false;\n    }\n}\n"],"names":["unsupportedFieldTypeConfigurationComponent","defineComponent","props","modelValue","type","Object","required","configurationProperties","setup","template","FieldTypeBase","getTextValue","value","_configurationValues","getHtmlValue","configurationValues","_isEscaped","concat","escapeHtml","getCondensedTextValue","truncate","getCondensedHtmlValue","getFormattedComponent","name","_objectSpread","getFieldEditorProps","isEscaped","Boolean","content","computed","_props$modelValue","getCondensedFormattedComponent","_props$modelValue2","getEditComponent","TextEditComponent","getConfigurationComponent","hasDefaultComponent","isFilterable","getSupportedComparisonTypes","ComparisonType","EqualTo","NotEqualTo","getFilterComponent","getStandardFilterComponent","getFilterValueDescription","valueText","getFilterValueText","comparisonType","IsBlank","IsNotBlank","getComparisonName","_this$getTextValue","text","doesValueMatchFilter","filterValue","numericFilterValue","parseFloat","numericValue","isNumericComparison","Number","isNaN","Contains","toLowerCase","includes","DoesNotContain","StartsWith","startsWith","EndsWith","endsWith","trim","LessThan","LessThanOrEqualTo","GreaterThan","GreaterThanOrEqualTo"],"mappings":"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"}