{"version":3,"file":"index.js","sources":["../../../../src/packages/core/picker-input/picker-input.context-token.ts","../../../../src/packages/core/picker-input/picker-input.context.ts"],"sourcesContent":["import type { UmbPickerInputContext } from './picker-input.context.js';\r\nimport { UmbContextToken } from '@umbraco-cms/backoffice/context-api';\r\n\r\nexport const UMB_PICKER_INPUT_CONTEXT = new UmbContextToken('UmbPickerInputContext');\r\n","import { UMB_PICKER_INPUT_CONTEXT } from './picker-input.context-token.js';\r\nimport { UmbChangeEvent } from '@umbraco-cms/backoffice/event';\r\nimport { UmbContextBase } from '@umbraco-cms/backoffice/class-api';\r\nimport { UmbRepositoryItemsManager } from '@umbraco-cms/backoffice/repository';\r\nimport { UMB_MODAL_MANAGER_CONTEXT, umbConfirmModal } from '@umbraco-cms/backoffice/modal';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport type { UmbItemRepository } from '@umbraco-cms/backoffice/repository';\r\nimport type { UmbModalToken, UmbPickerModalData, UmbPickerModalValue } from '@umbraco-cms/backoffice/modal';\r\nimport { UmbDeprecation } from '@umbraco-cms/backoffice/utils';\r\n\r\ntype PickerItemBaseType = { name: string; unique: string };\r\nexport class UmbPickerInputContext<\r\n\tPickedItemType extends PickerItemBaseType = PickerItemBaseType,\r\n\tPickerItemType extends PickerItemBaseType = PickedItemType,\r\n\tPickerModalConfigType extends UmbPickerModalData = UmbPickerModalData,\r\n\tPickerModalValueType extends UmbPickerModalValue = UmbPickerModalValue,\r\n> extends UmbContextBase {\r\n\tmodalAlias: string | UmbModalToken, PickerModalValueType>;\r\n\trepository?: UmbItemRepository;\r\n\t#getUnique: (entry: PickedItemType) => string | undefined;\r\n\r\n\t#itemManager;\r\n\r\n\tselection;\r\n\tselectedItems;\r\n\r\n\t/**\r\n\t * Define a minimum amount of selected items in this input, for this input to be valid.\r\n\t */\r\n\tpublic get max() {\r\n\t\treturn this._max;\r\n\t}\r\n\tpublic set max(value) {\r\n\t\tthis._max = value === undefined ? Infinity : value;\r\n\t}\r\n\tprivate _max = Infinity;\r\n\r\n\t/**\r\n\t * Define a maximum amount of selected items in this input, for this input to be valid.\r\n\t */\r\n\tpublic get min() {\r\n\t\treturn this._min;\r\n\t}\r\n\tpublic set min(value) {\r\n\t\tthis._min = value === undefined ? 0 : value;\r\n\t}\r\n\tprivate _min = 0;\r\n\r\n\t/**\r\n\t * Creates an instance of UmbPickerInputContext.\r\n\t * @param {UmbControllerHost} host - The host for the controller.\r\n\t * @param {string} repositoryAlias - The alias of the repository to use.\r\n\t * @param {(string | UmbModalToken, PickerModalValueType>)} modalAlias - The alias of the modal to use.\r\n\t * @param {((entry: PickedItemType) => string | undefined)} [getUniqueMethod] - DEPRECATED since 15.3. Will be removed in v. 17: A method to get the unique key from the item.\r\n\t * @memberof UmbPickerInputContext\r\n\t */\r\n\tconstructor(\r\n\t\thost: UmbControllerHost,\r\n\t\trepositoryAlias: string,\r\n\t\tmodalAlias: string | UmbModalToken, PickerModalValueType>,\r\n\t\tgetUniqueMethod?: (entry: PickedItemType) => string | undefined,\r\n\t) {\r\n\t\tsuper(host, UMB_PICKER_INPUT_CONTEXT);\r\n\t\tthis.modalAlias = modalAlias;\r\n\r\n\t\tthis.#getUnique = getUniqueMethod\r\n\t\t\t? (entry: PickedItemType) => {\r\n\t\t\t\t\tnew UmbDeprecation({\r\n\t\t\t\t\t\tdeprecated: 'The getUniqueMethod parameter.',\r\n\t\t\t\t\t\tremoveInVersion: '17.0.0',\r\n\t\t\t\t\t\tsolution: 'The required unique property on the item will be used instead.',\r\n\t\t\t\t\t}).warn();\r\n\t\t\t\t\treturn getUniqueMethod(entry);\r\n\t\t\t\t}\r\n\t\t\t: (entry) => entry.unique;\r\n\r\n\t\tthis.#itemManager = new UmbRepositoryItemsManager(this, repositoryAlias, getUniqueMethod);\r\n\r\n\t\tthis.selection = this.#itemManager.uniques;\r\n\t\tthis.selectedItems = this.#itemManager.items;\r\n\t}\r\n\r\n\tgetSelection() {\r\n\t\treturn this.#itemManager.getUniques();\r\n\t}\r\n\r\n\tsetSelection(selection: Array) {\r\n\t\t// Note: Currently we do not support picking root item. So we filter out null values:\r\n\t\tthis.#itemManager.setUniques(selection.filter((value) => value !== null) as Array);\r\n\t}\r\n\r\n\tasync openPicker(pickerData?: Partial) {\r\n\t\tawait this.#itemManager.init;\r\n\t\tconst modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT);\r\n\t\tconst modalContext = modalManager.open(this, this.modalAlias, {\r\n\t\t\tdata: {\r\n\t\t\t\tmultiple: this._max === 1 ? false : true,\r\n\t\t\t\t...pickerData,\r\n\t\t\t},\r\n\t\t\tvalue: {\r\n\t\t\t\tselection: this.getSelection(),\r\n\t\t\t} as PickerModalValueType,\r\n\t\t});\r\n\r\n\t\tconst modalValue = await modalContext?.onSubmit();\r\n\t\tthis.setSelection(modalValue.selection);\r\n\t\tthis.getHostElement().dispatchEvent(new UmbChangeEvent());\r\n\t}\r\n\r\n\tasync requestRemoveItem(unique: string) {\r\n\t\tconst item = this.#itemManager.getItems().find((item) => this.#getUnique(item) === unique);\r\n\t\tif (!item) throw new Error('Could not find item with unique: ' + unique);\r\n\r\n\t\tawait umbConfirmModal(this, {\r\n\t\t\tcolor: 'danger',\r\n\t\t\theadline: `Remove ${item.name}?`,\r\n\t\t\tcontent: 'Are you sure you want to remove this item',\r\n\t\t\tconfirmLabel: 'Remove',\r\n\t\t});\r\n\r\n\t\tthis.#removeItem(unique);\r\n\t}\r\n\r\n\t#removeItem(unique: string) {\r\n\t\tconst newSelection = this.getSelection().filter((value) => value !== unique);\r\n\t\tthis.setSelection(newSelection);\r\n\t\tthis.getHostElement().dispatchEvent(new UmbChangeEvent());\r\n\t}\r\n}\r\n"],"names":["UMB_PICKER_INPUT_CONTEXT","UmbContextToken","UmbPickerInputContext","UmbContextBase","host","repositoryAlias","modalAlias","getUniqueMethod","#getUnique","entry","UmbDeprecation","#itemManager","UmbRepositoryItemsManager","value","selection","pickerData","modalValue","UMB_MODAL_MANAGER_CONTEXT","UmbChangeEvent","unique","item","umbConfirmModal","#removeItem","newSelection"],"mappings":";;;;;;AAGa,MAAAA,IAA2B,IAAIC,EAAuC,uBAAuB;ACQnG,MAAMC,UAKHC,EAAsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwC/C,YACCC,GACAC,GACAC,GACAC,GACC;AACD,UAAMH,GAAMJ,CAAwB,GA3BrC,KAAQ,OAAO,OAWf,KAAQ,OAAO,GAiBd,KAAK,aAAaM,GAEb,KAAAE,KAAaD,IACf,CAACE,OACD,IAAIC,EAAe;AAAA,MAClB,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,UAAU;AAAA,IACV,CAAA,EAAE,KAAK,GACDH,EAAgBE,CAAK,KAE5B,CAACA,MAAUA,EAAM,QAEpB,KAAKE,KAAe,IAAIC,EAA0C,MAAMP,GAAiBE,CAAe,GAEnG,KAAA,YAAY,KAAKI,GAAa,SAC9B,KAAA,gBAAgB,KAAKA,GAAa;AAAA,EAAA;AAAA,EA5DxCH;AAAA,EAEAG;AAAA;AAAA;AAAA;AAAA,EAQA,IAAW,MAAM;AAChB,WAAO,KAAK;AAAA,EAAA;AAAA,EAEb,IAAW,IAAIE,GAAO;AAChB,SAAA,OAAOA,MAAU,SAAY,QAAWA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAO9C,IAAW,MAAM;AAChB,WAAO,KAAK;AAAA,EAAA;AAAA,EAEb,IAAW,IAAIA,GAAO;AAChB,SAAA,OAAOA,MAAU,SAAY,IAAIA;AAAA,EAAA;AAAA,EAsCvC,eAAe;AACP,WAAA,KAAKF,GAAa,WAAW;AAAA,EAAA;AAAA,EAGrC,aAAaG,GAAiC;AAExC,SAAAH,GAAa,WAAWG,EAAU,OAAO,CAACD,MAAUA,MAAU,IAAI,CAAkB;AAAA,EAAA;AAAA,EAG1F,MAAM,WAAWE,GAA6C;AAC7D,UAAM,KAAKJ,GAAa;AAYlB,UAAAK,IAAa,OAXE,MAAM,KAAK,WAAWC,CAAyB,GAClC,KAAK,MAAM,KAAK,YAAY;AAAA,MAC7D,MAAM;AAAA,QACL,UAAU,KAAK,SAAS;AAAA,QACxB,GAAGF;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,QACN,WAAW,KAAK,aAAa;AAAA,MAAA;AAAA,IAC9B,CACA,GAEsC,SAAS;AAC3C,SAAA,aAAaC,EAAW,SAAS,GACtC,KAAK,eAAe,EAAE,cAAc,IAAIE,GAAgB;AAAA,EAAA;AAAA,EAGzD,MAAM,kBAAkBC,GAAgB;AACvC,UAAMC,IAAO,KAAKT,GAAa,SAAA,EAAW,KAAK,CAACS,MAAS,KAAKZ,GAAWY,CAAI,MAAMD,CAAM;AACzF,QAAI,CAACC,EAAM,OAAM,IAAI,MAAM,sCAAsCD,CAAM;AAEvE,UAAME,EAAgB,MAAM;AAAA,MAC3B,OAAO;AAAA,MACP,UAAU,UAAUD,EAAK,IAAI;AAAA,MAC7B,SAAS;AAAA,MACT,cAAc;AAAA,IAAA,CACd,GAED,KAAKE,GAAYH,CAAM;AAAA,EAAA;AAAA,EAGxBG,GAAYH,GAAgB;AACrB,UAAAI,IAAe,KAAK,aAAa,EAAE,OAAO,CAACV,MAAUA,MAAUM,CAAM;AAC3E,SAAK,aAAaI,CAAY,GAC9B,KAAK,eAAe,EAAE,cAAc,IAAIL,GAAgB;AAAA,EAAA;AAE1D;"}