{"version":3,"file":"attributeValuesContainer.js","sources":["../../../Framework/Controls/attributeValuesContainer.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 { computed, defineComponent, PropType, ref, watch } from \"vue\";\r\nimport { PublicAttributeBag } from \"@Obsidian/ViewModels/Utility/publicAttributeBag\";\r\nimport RockSuspense from \"./rockSuspense\";\r\nimport LoadingIndicator from \"./loadingIndicator\";\r\nimport { List } from \"@Obsidian/Utility/linq\";\r\nimport TabbedContent from \"./tabbedContent\";\r\nimport RockField from \"./rockField\";\r\nimport { PublicAttributeCategoryBag } from \"@Obsidian/ViewModels/Utility/publicAttributeCategoryBag\";\r\nimport { emptyGuid } from \"@Obsidian/Utility/guid\";\r\n\r\ntype CategorizedAttributes = PublicAttributeCategoryBag & {\r\n attributes: PublicAttributeBag[]\r\n};\r\n\r\nexport default defineComponent({\r\n name: \"AttributeValuesContainer\",\r\n components: {\r\n RockField,\r\n LoadingIndicator,\r\n RockSuspense,\r\n TabbedContent,\r\n },\r\n props: {\r\n modelValue: {\r\n type: Object as PropType>,\r\n required: true\r\n },\r\n isEditMode: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n attributes: {\r\n type: Object as PropType>,\r\n required: true\r\n },\r\n showEmptyValues: {\r\n type: Boolean as PropType,\r\n default: true\r\n },\r\n showAbbreviatedName: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n displayWithinExistingRow: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n displayAsTabs: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n showCategoryLabel: {\r\n type: Boolean as PropType,\r\n default: true\r\n },\r\n numberOfColumns: {\r\n type: Number as PropType,\r\n default: 1\r\n },\r\n entityTypeName: {\r\n type: String as PropType,\r\n default: \"\"\r\n }\r\n },\r\n\r\n setup(props, { emit }) {\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 const categories = [...attr.categories] as PublicAttributeCategoryBag[]; // copy, so sort doesn't cause updates\r\n\r\n categories.sort((a, b) => a.order - b.order).forEach((cat, i) => {\r\n const newCat: CategorizedAttributes = { attributes: [], ...cat }; // 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(() => {\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(() => {\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 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-md-${12 / numColumns}`;\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 watch(() => props.modelValue, () => {\r\n values.value = { ...props.modelValue };\r\n });\r\n\r\n return {\r\n onUpdateValue,\r\n validAttributes,\r\n values,\r\n attributeCategories,\r\n actuallyDisplayAsTabs,\r\n defaultCategoryHeading,\r\n columnClass\r\n };\r\n },\r\n\r\n template: `\r\n\r\n \r\n \r\n\r\n`\r\n});\r\n"],"names":["defineComponent","name","components","RockField","LoadingIndicator","RockSuspense","TabbedContent","props","modelValue","type","Object","required","isEditMode","Boolean","default","attributes","showEmptyValues","showAbbreviatedName","displayWithinExistingRow","displayAsTabs","showCategoryLabel","numberOfColumns","Number","entityTypeName","String","setup","_ref","emit","validAttributes","computed","List","values","orderBy","a","order","toArray","ref","_objectSpread","attributeCategories","categoryList","guid","emptyGuid","value","forEach","attr","_props$modelValue$att","key","categories","length","sort","b","cat","i","newCat","some","oldCat","push","_categoryList$find","find","filter","actuallyDisplayAsTabs","hasCategories","defaultCategoryHeading","concat","columnClass","numColumns","onUpdateValue","watch","template"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,wDAAeA,eAAe,CAAC;MAC3BC,EAAAA,IAAI,EAAE,0BAA0B;MAChCC,EAAAA,UAAU,EAAE;UACRC,SAAS;UACTC,gBAAgB;UAChBC,YAAY;MACZC,IAAAA,aAAAA;SACH;MACDC,EAAAA,KAAK,EAAE;MACHC,IAAAA,UAAU,EAAE;MACRC,MAAAA,IAAI,EAAEC,MAA0C;MAChDC,MAAAA,QAAQ,EAAE,IAAA;WACb;MACDC,IAAAA,UAAU,EAAE;MACRH,MAAAA,IAAI,EAAEI,OAA4B;MAClCC,MAAAA,OAAO,EAAE,KAAA;WACZ;MACDC,IAAAA,UAAU,EAAE;MACRN,MAAAA,IAAI,EAAEC,MAAsD;MAC5DC,MAAAA,QAAQ,EAAE,IAAA;WACb;MACDK,IAAAA,eAAe,EAAE;MACbP,MAAAA,IAAI,EAAEI,OAA4B;MAClCC,MAAAA,OAAO,EAAE,IAAA;WACZ;MACDG,IAAAA,mBAAmB,EAAE;MACjBR,MAAAA,IAAI,EAAEI,OAA4B;MAClCC,MAAAA,OAAO,EAAE,KAAA;WACZ;MACDI,IAAAA,wBAAwB,EAAE;MACtBT,MAAAA,IAAI,EAAEI,OAA4B;MAClCC,MAAAA,OAAO,EAAE,KAAA;WACZ;MACDK,IAAAA,aAAa,EAAE;MACXV,MAAAA,IAAI,EAAEI,OAA4B;MAClCC,MAAAA,OAAO,EAAE,KAAA;WACZ;MACDM,IAAAA,iBAAiB,EAAE;MACfX,MAAAA,IAAI,EAAEI,OAA4B;MAClCC,MAAAA,OAAO,EAAE,IAAA;WACZ;MACDO,IAAAA,eAAe,EAAE;MACbZ,MAAAA,IAAI,EAAEa,MAA0B;MAChCR,MAAAA,OAAO,EAAE,CAAA;WACZ;MACDS,IAAAA,cAAc,EAAE;MACZd,MAAAA,IAAI,EAAEe,MAA0B;MAChCV,MAAAA,OAAO,EAAE,EAAA;MACb,KAAA;SACH;MAEDW,EAAAA,KAAKA,CAAClB,KAAK,EAAAmB,IAAA,EAAY;MAAA,IAAA,IAARC,IAAI,GAAAD,IAAA,CAAJC,IAAI,CAAA;MACf,IAAA,IAAMC,eAAe,GAAGC,QAAQ,CAAC,MAA4B;YACzD,OAAO,IAAIC,IAAI,CAACpB,MAAM,CAACqB,MAAM,CAACxB,KAAK,CAACQ,UAAU,CAAC,CAAC,CAC3CiB,OAAO,CAACC,CAAC,IAAIA,CAAC,CAACC,KAAK,CAAC,CACrBC,OAAO,EAAE,CAAA;MAClB,KAAC,CAAC,CAAA;UAEF,IAAMJ,MAAM,GAAGK,GAAG,CAAAC,cAAA,CAAM9B,EAAAA,EAAAA,KAAK,CAACC,UAAU,CAAG,CAAA,CAAA;MAE3C,IAAA,IAAM8B,mBAAmB,GAAGT,QAAQ,CAAC,MAAM;YAEvC,IAAMU,YAAqC,GAAG,CAAC;MAC3CC,QAAAA,IAAI,EAAEC,SAAS;MACfxC,QAAAA,IAAI,EAAE,YAAY;MAClBiC,QAAAA,KAAK,EAAE,CAAC;MACRnB,QAAAA,UAAU,EAAE,EAAA;MAChB,OAAC,CAAC,CAAA;MAEFa,MAAAA,eAAe,CAACc,KAAK,CAACC,OAAO,CAACC,IAAI,IAAI;MAAA,QAAA,IAAAC,qBAAA,CAAA;MAElC,QAAA,IAAI,CAACtC,KAAK,CAACS,eAAe,IAAI,CAACT,KAAK,CAACK,UAAU,IAAIgC,IAAI,CAACE,GAAG,IAAI,CAAAD,CAAAA,qBAAA,GAACtC,KAAK,CAACC,UAAU,CAACoC,IAAI,CAACE,GAAG,CAAC,MAAAD,IAAAA,IAAAA,qBAAA,cAAAA,qBAAA,GAAI,EAAE,KAAK,EAAE,EAAE;MACrG,UAAA,OAAA;MACJ,SAAA;cAEA,IAAID,IAAI,CAACG,UAAU,IAAIH,IAAI,CAACG,UAAU,CAACC,MAAM,GAAG,CAAC,EAAE;MAC/C,UAAA,IAAMD,UAAU,GAAG,CAAC,GAAGH,IAAI,CAACG,UAAU,CAAiC,CAAA;gBAEvEA,UAAU,CAACE,IAAI,CAAC,CAAChB,CAAC,EAAEiB,CAAC,KAAKjB,CAAC,CAACC,KAAK,GAAGgB,CAAC,CAAChB,KAAK,CAAC,CAACS,OAAO,CAAC,CAACQ,GAAG,EAAEC,CAAC,KAAK;kBAC7D,IAAMC,MAA6B,GAAAhB,cAAA,CAAA;MAAKtB,cAAAA,UAAU,EAAE,EAAA;MAAE,aAAA,EAAKoC,GAAG,CAAE,CAAA;MAGhE,YAAA,IAAI,CAACZ,YAAY,CAACe,IAAI,CAACC,MAAM,IAAIA,MAAM,CAACf,IAAI,IAAIa,MAAM,CAACb,IAAI,CAAC,EAAE;MAC1DD,cAAAA,YAAY,CAACiB,IAAI,CAACH,MAAM,CAAC,CAAA;MAC7B,aAAA;kBAGA,IAAID,CAAC,IAAI,CAAC,EAAE;MAAA,cAAA,IAAAK,kBAAA,CAAA;oBACR,CAAAA,kBAAA,GAAAlB,YAAY,CAACmB,IAAI,CAACP,GAAG,IAAIA,GAAG,CAACX,IAAI,IAAIa,MAAM,CAACb,IAAI,CAAC,MAAAiB,IAAAA,IAAAA,kBAAA,KAAjDA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAA,CAAmD1C,UAAU,CAACyC,IAAI,CAACZ,IAAI,CAAC,CAAA;MAC5E,aAAA;MACJ,WAAC,CAAC,CAAA;MACN,SAAC,MACI;gBAEDL,YAAY,CAAC,CAAC,CAAC,CAACxB,UAAU,CAACyC,IAAI,CAACZ,IAAI,CAAC,CAAA;MACzC,SAAA;MACJ,OAAC,CAAC,CAAA;MAGF,MAAA,OAAOL,YAAY,CAACoB,MAAM,CAACR,GAAG,IAAIA,GAAG,CAACpC,UAAU,CAACiC,MAAM,GAAG,CAAC,CAAC,CAACC,IAAI,CAAC,CAAChB,CAAC,EAAEiB,CAAC,KAAKjB,CAAC,CAACC,KAAK,GAAGgB,CAAC,CAAChB,KAAK,CAAC,CAAA;MAClG,KAAC,CAAC,CAAA;MAEF,IAAA,IAAM0B,qBAAqB,GAAG/B,QAAQ,CAAU,MAAM;MAClD,MAAA,IAAIS,mBAAmB,CAACI,KAAK,CAACM,MAAM,KAAK,CAAC,EAAE;MACxC,QAAA,OAAO,KAAK,CAAA;MAChB,OAAA;MAEA,MAAA,IAAMa,aAAa,GAAGvB,mBAAmB,CAACI,KAAK,CAACM,MAAM,GAAG,CAAC,IAAIV,mBAAmB,CAACI,KAAK,CAAC,CAAC,CAAC,CAACF,IAAI,KAAKC,SAAS,CAAA;YAE7G,OAAOoB,aAAa,IAAItD,KAAK,CAACY,aAAa,IAAI,CAACZ,KAAK,CAACK,UAAU,CAAA;MACpE,KAAC,CAAC,CAAA;MAEF,IAAA,IAAMkD,sBAAsB,GAAGjC,QAAQ,CAAS,MAAM;YAClD,IAAI+B,qBAAqB,CAAClB,KAAK,IAAI,CAACnC,KAAK,CAACgB,cAAc,EAAE;MACtD,QAAA,OAAO,YAAY,CAAA;MACvB,OAAA;MAEA,MAAA,OAAA,EAAA,CAAAwC,MAAA,CAAUxD,KAAK,CAACgB,cAAc,EAAA,aAAA,CAAA,CAAA;MAClC,KAAC,CAAC,CAAA;MAEF,IAAA,IAAMyC,WAAW,GAAGnC,QAAQ,CAAC,MAAM;MAC/B,MAAA,IAAIoC,UAAU,GAAG1D,KAAK,CAACc,eAAe,CAAA;YAGtC,IAAI4C,UAAU,GAAG,CAAC,EAAE;MAChBA,QAAAA,UAAU,GAAG,CAAC,CAAA;MAClB,OAAC,MACI,IAAIA,UAAU,IAAI,CAAC,EAAE;MACtBA,QAAAA,UAAU,GAAG,CAAC,CAAA;aACjB,MACI,IAAIA,UAAU,GAAG,CAAC,IAAIA,UAAU,GAAG,EAAE,EAAE;MACxCA,QAAAA,UAAU,GAAG,CAAC,CAAA;MAClB,OAAC,MACI,IAAIA,UAAU,GAAG,EAAE,EAAE;MACtBA,QAAAA,UAAU,GAAG,EAAE,CAAA;MACnB,OAAA;MAEA,MAAA,OAAA,SAAA,CAAAF,MAAA,CAAiB,EAAE,GAAGE,UAAU,CAAA,CAAA;MACpC,KAAC,CAAC,CAAA;MAEF,IAAA,IAAMC,aAAa,GAAGA,CAACpB,GAAW,EAAEJ,KAAa,KAAW;MACxDX,MAAAA,MAAM,CAACW,KAAK,CAACI,GAAG,CAAC,GAAGJ,KAAK,CAAA;MAEzBf,MAAAA,IAAI,CAAC,mBAAmB,EAAEI,MAAM,CAACW,KAAK,CAAC,CAAA;WAC1C,CAAA;MAEDyB,IAAAA,KAAK,CAAC,MAAM5D,KAAK,CAACC,UAAU,EAAE,MAAM;YAChCuB,MAAM,CAACW,KAAK,GAAAL,cAAA,KAAQ9B,KAAK,CAACC,UAAU,CAAE,CAAA;MAC1C,KAAC,CAAC,CAAA;UAEF,OAAO;YACH0D,aAAa;YACbtC,eAAe;YACfG,MAAM;YACNO,mBAAmB;YACnBsB,qBAAqB;YACrBE,sBAAsB;MACtBE,MAAAA,WAAAA;WACH,CAAA;SACJ;QAEDI,QAAQ,EAAA,u6EAAA;MAyDZ,CAAC,EAAC;;;;;;;;"}