\\r\\n\";","import { customElement, bindable, bindingMode } from 'aurelia-framework';\r\nimport { EntityReference } from '../../models/EntityReference';\r\n\r\n/**\r\n * MultiParentSelector Custom Element\r\n *\r\n * A custom element that allows selecting multiple parent organizations with validation.\r\n * Prevents duplicate selections, self-references, and ensures at least one parent is selected.\r\n */\r\n@customElement('multi-parent-selector')\r\nexport class MultiParentSelector {\r\n /**\r\n * List of available parent organizations to choose from\r\n */\r\n @bindable availableParents: EntityReference[] = [];\r\n\r\n /**\r\n * List of currently selected parent organizations (two-way bindable)\r\n */\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) selectedParents: EntityReference[] = [];\r\n\r\n /**\r\n * ID of the current organization (used to prevent self-reference)\r\n */\r\n @bindable currentOrganizationId?: number;\r\n\r\n /**\r\n * Currently selected parent ID in the dropdown\r\n */\r\n selectedParentId: number | null = null;\r\n\r\n /**\r\n * Validation state\r\n */\r\n isValid: boolean = true;\r\n\r\n /**\r\n * Validation error message\r\n */\r\n validationMessage: string = '';\r\n\r\n /**\r\n * Loading state for async operations\r\n */\r\n @bindable isLoading: boolean = false;\r\n\r\n /**\r\n * Adds a selected parent to the list of selected parents\r\n * Validates before adding to prevent duplicates and self-references\r\n */\r\n addParent(): void {\r\n // Clear any previous validation messages\r\n this.isValid = true;\r\n this.validationMessage = '';\r\n\r\n // Validate that a parent is selected\r\n if (!this.selectedParentId) {\r\n this.isValid = false;\r\n this.validationMessage = 'Please select a parent organization.';\r\n return;\r\n }\r\n\r\n // Aurelia 1 select binding can return a string from the DOM; normalise to number for comparisons\r\n const selectedId = Number(this.selectedParentId);\r\n\r\n // Validate against self-reference\r\n if (this.currentOrganizationId && selectedId === this.currentOrganizationId) {\r\n this.isValid = false;\r\n this.validationMessage = 'Cannot select the current organization as its own parent.';\r\n return;\r\n }\r\n\r\n // Check for duplicate parents\r\n const isDuplicate = this.selectedParents.some(parent => parent.id === selectedId);\r\n if (isDuplicate) {\r\n this.isValid = false;\r\n this.validationMessage = 'This parent organization has already been selected.';\r\n return;\r\n }\r\n\r\n // Find the parent in the available parents list\r\n const parentToAdd = this.availableParents.find(parent => parent.id === selectedId);\r\n\r\n if (!parentToAdd) {\r\n this.isValid = false;\r\n this.validationMessage = 'Selected parent organization not found.';\r\n return;\r\n }\r\n\r\n // Add the parent to the selected parents list\r\n this.selectedParents.push(parentToAdd);\r\n\r\n // Clear the dropdown selection\r\n this.selectedParentId = null;\r\n }\r\n\r\n /**\r\n * Removes a parent from the list of selected parents\r\n * @param parentId - The ID of the parent to remove\r\n */\r\n removeParent(parentId: number): void {\r\n // Clear any validation messages\r\n this.isValid = true;\r\n this.validationMessage = '';\r\n\r\n // Find and remove the parent\r\n const index = this.selectedParents.findIndex(parent => parent.id === parentId);\r\n if (index !== -1) {\r\n this.selectedParents.splice(index, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Validates the current state of selected parents\r\n * @returns true if valid, false otherwise\r\n */\r\n validate(): boolean {\r\n this.isValid = true;\r\n this.validationMessage = '';\r\n\r\n // Ensure at least one parent is selected\r\n if (this.selectedParents.length === 0) {\r\n this.isValid = false;\r\n this.validationMessage = 'At least one parent organization must be selected.';\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Gets the list of available parents excluding already selected ones\r\n */\r\n get filteredAvailableParents(): EntityReference[] {\r\n if (!this.availableParents) {\r\n return [];\r\n }\r\n\r\n return this.availableParents.filter(parent => {\r\n // Exclude self-reference\r\n if (this.currentOrganizationId && parent.id === this.currentOrganizationId) {\r\n return false;\r\n }\r\n\r\n // Exclude already selected parents\r\n const isAlreadySelected = this.selectedParents.some(selected => selected.id === parent.id);\r\n return !isAlreadySelected;\r\n });\r\n }\r\n}\r\n","module.exports = \"\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n Loading available parent organizations...\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n No available parent organizations to select.\\r\\n
\\r\\n\\r\\n \\r\\n
0\\\" class=\\\"selected-parents mb-3\\\">\\r\\n
Selected Parents:
\\r\\n
1\\\">\\r\\n
(Note: The parent shown at the top of the list is the Primary Parent and must remain at the top. Newly added parents appear at the bottom.)