{"version":3,"sources":["Scripts/ts/CustomBindingHandlers/SelectTwo/selectTwoBindings.ts"],"names":[],"mappings":"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","file":"selectTwoBindings.js","sourcesContent":["// IMPORTANT: Any changes to these bindings may need to be copied into Back Office as these bindings are duplicated between the two solutions.\r\nimport * as $ from \"jquery\";\r\nimport * as ko from \"knockout\";\r\nimport * as _ from \"underscore\";\r\nimport * as localisationHelper from \"localisationHelper\";\r\n\r\n// Helpers\r\nimport \"selectTwo\";\r\n\r\n// Models\r\nimport {\r\n DefaultSelectTwoModel, SelectTwoWithChildren, SelectTwoBindingParams, SelectTwoEventOptions,\r\n MultipleOptionSelectionRequest, SelectTwoTemplateSelection, SelectTwoTemplateResult\r\n} from \"Content/ts/Models/Shared/SelectTwo/selectTwoModels\";\r\n\r\n// Configuration\r\nimport { SelectTwoAjaxConfiguration } from \"Content/ts/Shared/Controls/SelectTwo/Configuration/selectTwoAjaxConfiguration\";\r\n\r\nexport const Deps = {\r\n LocalisationHelper: localisationHelper\r\n};\r\n\r\nclass SelectTwoBindings {\r\n templateEngine: any;\r\n selectTwoElement: any;\r\n\r\n constructor() {\r\n // Purpose: Configures a hierarchical list where multiple items can be selected.\r\n ko.bindingHandlers.selectTwoMultipleWithChildren = {\r\n init: (element: any, valueAccessor: () => KnockoutObservableArray, allBindingsAccessor: () => SelectTwoBindingParams) => {\r\n const dataSource = valueAccessor(),\r\n allBindings = allBindingsAccessor();\r\n\r\n allBindings.allowMultiple = true;\r\n\r\n this.configureSelectContainer(element, dataSource, allBindings);\r\n this.reloadTriggers(element, valueAccessor(), allBindings);\r\n this.preselectOptionWithChildItems(dataSource(), allBindings);\r\n },\r\n update: (element: any, valueAccessor: () => KnockoutObservableArray, allBindingsAccessor: () => SelectTwoBindingParams) => {\r\n const dataSource = valueAccessor(),\r\n allBindings = allBindingsAccessor();\r\n\r\n this.reloadTriggers(element, valueAccessor(), allBindings);\r\n this.preselectOptionWithChildItems(dataSource(), allBindings);\r\n }\r\n };\r\n\r\n // Purpose: Configures a hierarchical list where only one item can be selected.\r\n ko.bindingHandlers.selectTwoSingleWithChildren = {\r\n init: (element: any, valueAccessor: () => KnockoutObservableArray, allBindingsAccessor: () => SelectTwoBindingParams) => {\r\n const dataSource = valueAccessor(),\r\n allBindings = allBindingsAccessor();\r\n\r\n allBindings.allowMultiple = false;\r\n\r\n this.configureSelectContainer(element, dataSource, allBindings);\r\n },\r\n update: (element: any, valueAccessor: () => KnockoutObservableArray, allBindingsAccessor: () => SelectTwoBindingParams) => {\r\n const dataSource = valueAccessor(),\r\n allBindings = allBindingsAccessor();\r\n\r\n this.reloadTriggers(element, valueAccessor(), allBindings);\r\n this.preselectOptionWithChildItems(dataSource(), allBindings);\r\n }\r\n };\r\n\r\n // Purpose: Configures a standard searchable list where only one item can be selected.\r\n ko.bindingHandlers.selectTwoSingle = {\r\n init: (element: any, valueAccessor: () => KnockoutObservableArray, allBindingsAccessor: () => SelectTwoBindingParams) => {\r\n const dataSource = valueAccessor(),\r\n allBindings = allBindingsAccessor();\r\n\r\n allBindings.allowMultiple = false;\r\n\r\n this.configureSelectContainer(element, dataSource, allBindings);\r\n },\r\n update: (element: any, valueAccessor: () => KnockoutObservableArray, allBindingsAccessor: () => SelectTwoBindingParams) => {\r\n const dataSource = valueAccessor(),\r\n allBindings = allBindingsAccessor();\r\n\r\n this.reloadTriggers(element, valueAccessor(), allBindings);\r\n this.defaultPreselectOption(dataSource(), allBindings);\r\n }\r\n };\r\n\r\n // Purpose: Configures a standard searchable list where multiple items can be selected.\r\n ko.bindingHandlers.selectTwoMultiple = {\r\n init: (element: any, valueAccessor: () => KnockoutObservableArray, allBindingsAccessor: () => SelectTwoBindingParams) => {\r\n const dataSource = valueAccessor(),\r\n allBindings = allBindingsAccessor();\r\n\r\n allBindings.allowMultiple = true;\r\n\r\n this.configureSelectContainer(element, dataSource, allBindings);\r\n },\r\n update: (element: any, valueAccessor: () => KnockoutObservableArray, allBindingsAccessor: () => SelectTwoBindingParams) => {\r\n const dataSource = valueAccessor(),\r\n allBindings = allBindingsAccessor();\r\n\r\n this.reloadTriggers(element, valueAccessor(), allBindings);\r\n this.defaultPreselectOption(dataSource(), allBindings);\r\n }\r\n };\r\n\r\n\r\n // Purpose: New bindings allows searches to be processed via the Database rather than loading all the content\r\n // at page or component load. This is especially useful for scenarios where a significant amount of\r\n // data could be loaded (e.g.Clubs, Locations and Inventory Items).\r\n // Sources: https://select2.org/data-sources/ajax\r\n // https://select2.org/programmatic-control/add-select-clear-items\r\n ko.bindingHandlers.selectTwoAjax = {\r\n init: (element: any, valueAccessor: any, allBindingsAccessor: any) => {\r\n const value = valueAccessor(), // Note: This can be either a knockout observable or observable array\r\n allBindings = allBindingsAccessor(),\r\n selectTwoSignals = allBindings.selectTwoSignals as SelectTwoAjaxConfiguration;\r\n\r\n ($(element)).select2({\r\n ajax: {\r\n delay: 500, // Rate limit the request to only fire once the user has stopped typing\r\n cache: true,\r\n url: allBindings.url,\r\n data: (params: any) => {\r\n return allBindings.searchParameters ? allBindings.searchParameters(params.term) : params.term;\r\n },\r\n processResults: (response: any[]) => {\r\n return {\r\n results: allBindings.mapResults ? allBindings.mapResults(response) : response\r\n };\r\n }\r\n },\r\n minimumInputLength: 3,\r\n placeholder: allBindings.placeholder,\r\n allowClear: allBindings.allowClear || false,\r\n multiple: allBindings.allowMultiple || false,\r\n templateSelection: (repo: SelectTwoTemplateSelection) => {\r\n return repo.text;\r\n },\r\n templateResult: (repo: SelectTwoTemplateResult) => {\r\n return repo.text;\r\n }\r\n });\r\n\r\n $(element)\r\n .on(\"select2:select\", (event: any) => {\r\n const eve: SelectTwoEventOptions = event;\r\n const dataId: number = parseInt(eve.params.data.id);\r\n\r\n if (ko.isObservable(value) && 'push' in value) {\r\n (value as KnockoutObservableArray).push(dataId);\r\n } else {\r\n (value as KnockoutObservable)(dataId);\r\n }\r\n })\r\n .on(\"select2:unselect\", (event: any) => {\r\n const eve: SelectTwoEventOptions = event;\r\n const dataId: number = parseInt(eve.params.data.id);\r\n\r\n if (ko.isObservable(value) && 'push' in value) {\r\n (value as KnockoutObservableArray).remove(dataId);\r\n } else {\r\n (value as KnockoutObservable)(null);\r\n }\r\n })\r\n .on(\"select2:clear\", function () {\r\n $(this).on(\"select2:opening.cancelOpen\", function (event) {\r\n // Note : Select2 default configuration is to immediately open the dropdown after clearing\r\n // the option. This implementation gets around their decision by preventing the default\r\n // behaviour of the plugin and ensuring the popup window is immediately closed. The\r\n // decision around this has been signed off by the Product Team.\r\n // Source : https://github.com/select2/select2/issues/3320\r\n // https://github.com/select2/select2/issues/3320#issuecomment-524153140\r\n event.preventDefault();\r\n $(this).off(\"select2:opening.cancelOpen\");\r\n });\r\n });\r\n\r\n value.subscribe((newValue?: number) => {\r\n $(element).val(newValue).trigger('change');\r\n });\r\n\r\n if (selectTwoSignals != null) {\r\n selectTwoSignals.selectSingleOption.add(this.selectSingleOption.bind({ selectTwoElement: element }));\r\n selectTwoSignals.selectMultipleOptions.add(this.selectMultipleOptions.bind({ selectTwoElement: element }));\r\n }\r\n }\r\n };\r\n }\r\n\r\n // Note: Will ensure the provided list of items are manually inserted into the Select2 container.\r\n private selectMultipleOptions(request: MultipleOptionSelectionRequest[]) {\r\n const ele = $(this.selectTwoElement) as any;\r\n\r\n const options: HTMLOptionElement[] = [];\r\n\r\n _.each(request, (item: MultipleOptionSelectionRequest) => {\r\n options.push(new Option(item.Name, item.Id, false, true))\r\n });\r\n\r\n // Note : Select2 uses a caching mechanism to store any preselected options in memory so it can reduce calls the \r\n // database when appropriate. However, this can sometimes cause issues when navigating in and out of the same\r\n // workflow as it may duplicate the selection when dealing with arrays. In order to counteract this it's simpler\r\n // to completely clear out the cache and reappend all the necessary selected options programatically.\r\n ele.empty();\r\n ele.append(options).trigger('change');\r\n }\r\n\r\n // Note: Will ensure the provided observable has been updated before manually inserting and selecting the value via the Select2 container.\r\n private selectSingleOption(valueToUpdate: KnockoutObservable, selectOptionValue: any, selectOptionText: any, selectOption?: boolean) {\r\n const element = $(this.selectTwoElement),\r\n preselectOption = selectOption || false,\r\n optionText = ko.unwrap(selectOptionText),\r\n optionValue = ko.unwrap(selectOptionValue);\r\n\r\n valueToUpdate(optionValue);\r\n\r\n if (element.find(`option[value=\"${optionValue}\"]`).length) {\r\n element.val(optionValue).trigger('change');\r\n } else {\r\n const newOption = new Option(optionText, optionValue, false, preselectOption);\r\n element.append(newOption).trigger('change');\r\n }\r\n }\r\n\r\n private preselectOptionWithChildItems(dataSource: SelectTwoWithChildren[], allBindings: SelectTwoBindingParams) {\r\n _.each(dataSource, (item: SelectTwoWithChildren) => {\r\n this.attemptValueToggle(item, allBindings);\r\n\r\n if (item.children && item.children.length > 0) {\r\n this.preselectOptionWithChildItems(item.children, allBindings);\r\n }\r\n });\r\n }\r\n\r\n private defaultPreselectOption(dataSource: DefaultSelectTwoModel[], allBindings: SelectTwoBindingParams) {\r\n _.each(dataSource, (item: DefaultSelectTwoModel) => {\r\n this.attemptValueToggle(item, allBindings);\r\n });\r\n }\r\n\r\n private attemptValueToggle(item: DefaultSelectTwoModel, allBindings: SelectTwoBindingParams) {\r\n const id = allBindings.idIsString ? item.id : parseInt(item.id);\r\n\r\n if (item.selected && !allBindings.selectedValues) {\r\n allBindings.selectedValue(id);\r\n }\r\n }\r\n\r\n // Note: Ensures the list is completely cleaned up before adding the new options. Needs to be done in this manor in order to stop duplicate \r\n // items from being added to the list.\r\n private reloadTriggers(element: any, dataSource: KnockoutObservableArray, allBindings: SelectTwoBindingParams) {\r\n let ele = $(element) as any,\r\n dataAdapter = ele.data(\"select2\").dataAdapter;\r\n\r\n ele.empty();\r\n\r\n // Note : Standard select markup requires a placeholder option in order to have a default unselected state and it turns out Select2 \r\n // works in the same way. If you specify a placeholder message it only acts as an overlay to the input and doesn't actually allow\r\n // an 'unselected' option even though you can clear the selected option from the UI. This becomes problematic when you have a search \r\n // page (e.g.Sports Course Search) which shouldn't have an option pre-selected. With that in mind and their own documentation proving \r\n // this they recommend manually adding in an 'unselected' option to the top of the list.\r\n // Technical : When the list updates (e.g. loading has finished) there is no 'unselected' state so rather than leaving it upto the calling element\r\n // to define this information, it's added manually. From the hidden select perspective the option is available, however in terms of select2\r\n // it's hidden from view and selection. Additionally, this issue only affects single selection containers so multi - selects don't need this \r\n // 'unselected' option.\r\n // Source : https://select2.org/placeholders\r\n // https://github.com/select2/select2/issues/3553\r\n if (allBindings.placeholderMessage && !allBindings.allowMultiple) {\r\n dataSource.unshift({ id: \"\", text: \"\" } as DefaultSelectTwoModel);\r\n }\r\n\r\n dataAdapter.addOptions(dataAdapter.convertToOptions(dataSource()));\r\n ele.trigger(\"change\");\r\n }\r\n\r\n // Note: Base configuration for a select2 container, use this when adding new bindings to this file.\r\n private configureSelectContainer(element: any, dataSource: KnockoutObservableArray, allBindings: SelectTwoBindingParams) {\r\n const ele = $(element) as any;\r\n\r\n ko.utils.domNodeDisposal.addDisposeCallback(element, () => {\r\n if (element.data != null && element.data(\"select2\")) {\r\n element.select2(\"select2\");\r\n }\r\n });\r\n\r\n ele.select2({\r\n data: dataSource,\r\n dropdownAutoWidth: false,\r\n allowClear: allBindings.allowClear,\r\n multiple: allBindings.allowMultiple,\r\n closeOnSelect: allBindings.closeOnSelect,\r\n placeholder: allBindings.placeholderMessage,\r\n minimumResultsForSearch: allBindings.minimumResultsForSearch\r\n }).on(\"select2:select\", function (event: any) {\r\n // Note: The IDs assigned in select2 are strings so they need to be converted to ints in \r\n // order to remove them from the selectedValues list. Can also be strings when the binding \r\n // 'idIsString' is set to true in which case the values don't need to be parsed as ints\r\n\r\n const eve: SelectTwoEventOptions = event;\r\n const selectedId = allBindings.idIsString\r\n ? eve.params.data.id\r\n : parseInt(eve.params.data.id);\r\n\r\n if (allBindings.selectedValues) {\r\n allBindings.selectedValues.push(selectedId);\r\n } else {\r\n const reevaluateValue: string | number = (function () {\r\n if (allBindings.idIsString) {\r\n return selectedId;\r\n } else {\r\n return selectedId >= 0\r\n ? selectedId\r\n : null;\r\n }\r\n })();\r\n\r\n allBindings.selectedValue(reevaluateValue);\r\n }\r\n }).on(\"select2:unselect\", function (event: any) {\r\n const eve: SelectTwoEventOptions = event;\r\n\r\n //Note: The IDs assigned in select2 are strings so they need to be converted to ints in \r\n // order to remove them from the selectedValues list.\r\n if (allBindings.selectedValues) {\r\n allBindings.selectedValues.remove(parseInt(eve.params.data.id));\r\n } else {\r\n allBindings.selectedValue(null);\r\n }\r\n });\r\n\r\n if (allBindings.selectedValues) {\r\n allBindings.selectedValues.subscribe((newValue: number[] | string[]) => {\r\n $(element).val(newValue).trigger('change');\r\n });\r\n } else {\r\n allBindings.selectedValue.subscribe((newValue?: number | string) => {\r\n $(element).val(newValue).trigger('change');\r\n });\r\n }\r\n }\r\n}\r\n\r\nvar service = new SelectTwoBindings();\r\nexport { service as SelectTwoBindings };"]}