{"version":3,"file":"attributeValuesContainer.obs.js","sources":["../../../Framework/Controls/attributeValuesContainer.obs"],"sourcesContent":["<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n    <RockSuspense>\r\n        <template #default>\r\n            <div v-if=\"displayWithinExistingRow\" :class=\"columnClass\" v-for=\"a in validAttributes\" :key=\"a.attributeGuid\">\r\n                <RockField\r\n                           :isEditMode=\"isEditMode\"\r\n                           :attribute=\"a\"\r\n                           :modelValue=\"values[a.key!]\"\r\n                           @update:modelValue=\"onUpdateValue(a.key!, $event)\"\r\n                           :showEmptyValue=\"showEmptyValues\"\r\n                           :showAbbreviatedName=\"showAbbreviatedName\" />\r\n            </div>\r\n\r\n            <TabbedContent v-else-if=\"actuallyDisplayAsTabs\" :tabs=\"attributeCategoryNames\">\r\n                <template #tabpane=\"{ item }\">\r\n                    <div v-for=\"a in getCategoryAttributes(item)\" :key=\"a.attributeGuid\">\r\n                        <RockField\r\n                                   :isEditMode=\"isEditMode\"\r\n                                   :attribute=\"a\"\r\n                                   :modelValue=\"values[a.key!]\"\r\n                                   @update:modelValue=\"onUpdateValue(a.key!, $event)\"\r\n                                   :showEmptyValue=\"showEmptyValues\"\r\n                                   :showAbbreviatedName=\"showAbbreviatedName\" />\r\n                    </div>\r\n                </template>\r\n            </TabbedContent>\r\n\r\n            <template v-else>\r\n                <div v-for=\"cat in attributeCategories\" key=\"cat.guid\">\r\n                    <h4 v-if=\"showCategoryLabel && areEqual(cat.guid, emptyGuid) && !isEditMode\">{{ defaultCategoryHeading }}</h4>\r\n                    <h4 v-else-if=\"showCategoryLabel && !areEqual(cat.guid, emptyGuid)\">{{ cat.name }}</h4>\r\n\r\n                    <div :class=\"{ 'attribute-value-container-display': true, 'row': numberOfColumns > 1 }\">\r\n                        <ItemsWithPreAndPostHtml :items=\"prePostHtmlItems[cat.guid]\" v-if=\"isEditMode && showPrePostHtml\">\r\n                            <template v-slot:[a.attributeGuid] v-for=\"a in cat.attributes\" :key=\"a.attributeGuid\">\r\n                                <RockField\r\n                                           :isEditMode=\"isEditMode\"\r\n                                           :attribute=\"a\"\r\n                                           :modelValue=\"values[a.key!]\"\r\n                                           @update:modelValue=\"onUpdateValue(a.key!, $event)\"\r\n                                           :showEmptyValue=\"showEmptyValues\"\r\n                                           :showAbbreviatedName=\"showAbbreviatedName\" />\r\n                            </template>\r\n                        </ItemsWithPreAndPostHtml>\r\n\r\n                        <div v-else :class=\"columnClass\" v-for=\"a in cat.attributes\" :key=\"a.attributeGuid\">\r\n                            <RockField\r\n                                       :isEditMode=\"isEditMode\"\r\n                                       :attribute=\"a\"\r\n                                       :modelValue=\"values[a.key!]\"\r\n                                       @update:modelValue=\"onUpdateValue(a.key!, $event)\"\r\n                                       :showEmptyValue=\"showEmptyValues\"\r\n                                       :showAbbreviatedName=\"showAbbreviatedName\" />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </template>\r\n        </template>\r\n        <template #loading>\r\n            <LoadingIndicator />\r\n        </template>\r\n    </RockSuspense>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n    import { computed, PropType, ref, watch } from \"vue\";\r\n    import { PublicAttributeBag } from \"@Obsidian/ViewModels/Utility/publicAttributeBag\";\r\n    import RockSuspense from \"./rockSuspense.obs\";\r\n    import LoadingIndicator from \"./loadingIndicator.obs\";\r\n    import { List } from \"@Obsidian/Utility/linq\";\r\n    import TabbedContent from \"./tabbedContent.obs\";\r\n    import RockField from \"./rockField.obs\";\r\n    import { PublicAttributeCategoryBag } from \"@Obsidian/ViewModels/Utility/publicAttributeCategoryBag\";\r\n    import { areEqual, emptyGuid } from \"@Obsidian/Utility/guid\";\r\n    import ItemsWithPreAndPostHtml from \"./itemsWithPreAndPostHtml.obs\";\r\n    import { ItemWithPreAndPostHtml } from \"@Obsidian/Types/Controls/itemsWithPreAndPostHtml\";\r\n    import { Guid } from \"@Obsidian/Types\";\r\n\r\n    type CategorizedAttributes = PublicAttributeCategoryBag & {\r\n        attributes: PublicAttributeBag[]\r\n    };\r\n\r\n    const props = defineProps({\r\n        modelValue: {\r\n            type: Object as PropType<Record<string, string>>,\r\n            required: true\r\n        },\r\n        isEditMode: {\r\n            type: Boolean,\r\n            default: false\r\n        },\r\n        attributes: {\r\n            type: Object as PropType<Record<string, PublicAttributeBag>>,\r\n            required: true\r\n        },\r\n        showEmptyValues: {\r\n            type: Boolean,\r\n            default: true\r\n        },\r\n        showAbbreviatedName: {\r\n            type: Boolean,\r\n            default: false\r\n        },\r\n        displayWithinExistingRow: {\r\n            type: Boolean,\r\n            default: false\r\n        },\r\n        displayAsTabs: {\r\n            type: Boolean,\r\n            default: false\r\n        },\r\n        showCategoryLabel: {\r\n            type: Boolean,\r\n            default: true\r\n        },\r\n        showPrePostHtml: {\r\n            type: Boolean,\r\n            default: true\r\n        },\r\n\r\n        /**\r\n         * The total number of columns in this container.\r\n         *\r\n         * An attribute will be added in each column.\r\n         */\r\n        numberOfColumns: {\r\n            type: Number,\r\n            default: 1\r\n        },\r\n        entityTypeName: {\r\n            type: String,\r\n            default: \"\"\r\n        },\r\n        disabled: {\r\n            type: Boolean as PropType<boolean>,\r\n            default: false\r\n        },\r\n\r\n        /**\r\n         * The breakpoint to use for each column.\r\n         */\r\n        columnBreakpoint: {\r\n            type: String as PropType<\"xs\" | \"sm\" | \"md\" | \"lg\">,\r\n            default: \"md\"\r\n        }\r\n    });\r\n\r\n    const emit = defineEmits<{\r\n        (e: \"update:modelValue\", value: Record<string, string>): void;\r\n    }>();\r\n\r\n    const validAttributes = computed((): PublicAttributeBag[] => {\r\n        return new List(Object.values(props.attributes))\r\n            .orderBy(a => a.order)\r\n            .toArray();\r\n    });\r\n\r\n    const values = ref({ ...props.modelValue });\r\n\r\n    const attributeCategories = computed(() => {\r\n        // Initialize the category list with a \"default\" category\r\n        const categoryList: CategorizedAttributes[] = [{\r\n            guid: emptyGuid,\r\n            name: \"Attributes\",\r\n            order: 0,\r\n            attributes: []\r\n        }];\r\n\r\n        validAttributes.value.forEach(attr => {\r\n            // Skip empty attributes if we are not set to display empty values or we're not editing values\r\n            if (!props.showEmptyValues && !props.isEditMode && attr.key && (props.modelValue[attr.key] ?? \"\") == \"\") {\r\n                return;\r\n            }\r\n\r\n            if (attr.categories && attr.categories.length > 0) {\r\n                // Copy so sort doesn't cause updates.\r\n                const categories: PublicAttributeCategoryBag[] = [\r\n                    ...attr.categories,\r\n                ];\r\n\r\n                categories.sort((a, b) => a.order - b.order).forEach((cat, i) => {\r\n                    const newCat: CategorizedAttributes = {\r\n                        attributes: [],\r\n                        ...cat\r\n                    }; // copy and convert to CategorizedAttributes\r\n\r\n                    // Make sure we only have 1 copy of any category in the list\r\n                    if (!categoryList.some(oldCat => oldCat.guid == newCat.guid)) {\r\n                        categoryList.push(newCat);\r\n                    }\r\n\r\n                    // Add this attribute to the first (in order) category it is in\r\n                    if (i == 0) {\r\n                        categoryList.find(cat => cat.guid == newCat.guid)?.attributes.push(attr);\r\n                    }\r\n                });\r\n            }\r\n            else {\r\n                // Put in \"default\" category\r\n                categoryList[0].attributes.push(attr);\r\n            }\r\n        });\r\n\r\n        // Clear out any categories that don't have any attributes assigned to them, then sort the list by category order\r\n        return categoryList.filter(cat => cat.attributes.length > 0).sort((a, b) => a.order - b.order);\r\n    });\r\n\r\n    const actuallyDisplayAsTabs = computed<boolean>(() => {\r\n        if (attributeCategories.value.length === 0) {\r\n            return false;\r\n        }\r\n\r\n        const hasCategories = attributeCategories.value.length > 1 || attributeCategories.value[0].guid !== emptyGuid;\r\n\r\n        return hasCategories && props.displayAsTabs && !props.isEditMode;\r\n    });\r\n\r\n    const defaultCategoryHeading = computed<string>(() => {\r\n        if (actuallyDisplayAsTabs.value || !props.entityTypeName) {\r\n            return \"Attributes\";\r\n        }\r\n\r\n        return `${props.entityTypeName} Attributes`;\r\n    });\r\n\r\n    const attributeCategoryNames = computed((): string[] => {\r\n        return attributeCategories.value.map(a => a.name ?? \"\");\r\n    });\r\n\r\n    const columnClass = computed(() => {\r\n        let numColumns = props.numberOfColumns;\r\n\r\n        // Need to make the columns divisible by 12\r\n        if (numColumns < 1) {\r\n            numColumns = 1;\r\n        }\r\n        else if (numColumns == 5) {\r\n            numColumns = 4;\r\n        }\r\n        else if (numColumns > 6 && numColumns < 12) {\r\n            numColumns = 6;\r\n        }\r\n        else if (numColumns > 12) {\r\n            numColumns = 12;\r\n        }\r\n\r\n        return `col-${props.columnBreakpoint}-${12 / numColumns}`;\r\n    });\r\n\r\n    function getCategoryAttributes(categoryName: string): PublicAttributeBag[] {\r\n        return attributeCategories.value\r\n            .find(c => c.name === categoryName)\r\n            ?.attributes ?? [];\r\n    }\r\n\r\n    const onUpdateValue = (key: string, value: string): void => {\r\n        values.value[key] = value;\r\n\r\n        emit(\"update:modelValue\", values.value);\r\n    };\r\n\r\n    const prePostHtmlItems = computed<Record<Guid, ItemWithPreAndPostHtml[]>>(() => {\r\n        const items: Record<Guid, ItemWithPreAndPostHtml[]> = {};\r\n\r\n        attributeCategories.value.forEach((ac) => {\r\n            items[ac.guid] = items[ac.guid] || [];\r\n\r\n            ac.attributes.forEach(attr => {\r\n                let preHtml = attr.preHtml ?? \"\";\r\n                let postHtml = attr.postHtml ?? \"\";\r\n\r\n                if (props.numberOfColumns > 1) {\r\n                    preHtml = `<div class=\"${columnClass.value}\">` + preHtml;\r\n                    postHtml += \"</div>\";\r\n                }\r\n\r\n                items[ac.guid].push({\r\n                    slotName: attr.attributeGuid,\r\n                    preHtml,\r\n                    postHtml\r\n                });\r\n            });\r\n        });\r\n\r\n        return items;\r\n    });\r\n\r\n    watch(() => props.modelValue, () => {\r\n        values.value = { ...props.modelValue };\r\n    });\r\n</script>\r\n"],"names":["validAttributes","computed","List","Object","values","props","attributes","orderBy","a","order","toArray","ref","_objectSpread","modelValue","attributeCategories","categoryList","guid","emptyGuid","name","value","forEach","attr","_props$modelValue$att","showEmptyValues","isEditMode","key","categories","length","sort","b","cat","i","newCat","some","oldCat","push","_categoryList$find","find","filter","actuallyDisplayAsTabs","hasCategories","displayAsTabs","defaultCategoryHeading","entityTypeName","concat","attributeCategoryNames","map","_a$name","columnClass","numColumns","numberOfColumns","columnBreakpoint","getCategoryAttributes","categoryName","_attributeCategories$","_attributeCategories$2","c","onUpdateValue","emit","prePostHtmlItems","items","ac","_attr$preHtml","_attr$postHtml","preHtml","postHtml","slotName","attributeGuid","watch"],"mappings":"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"}