{"version":3,"file":"index.js","sources":["../../../../src/packages/core/picker-input/picker-input.context.ts"],"sourcesContent":["import { UmbChangeEvent } from '@umbraco-cms/backoffice/event';\r\nimport { UmbControllerBase } 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\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 UmbControllerBase {\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/* TODO: find a better way to have a getUniqueMethod. If we want to support trees/items of different types,\r\n\tthen it need to be bound to the type and can't be a generic method we pass in. */\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);\r\n\t\tthis.modalAlias = modalAlias;\r\n\t\tthis.#getUnique = getUniqueMethod || ((entry) => entry.unique);\r\n\r\n\t\tthis.#itemManager = new UmbRepositoryItemsManager(this, repositoryAlias, this.#getUnique);\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":["UmbPickerInputContext","UmbControllerBase","host","repositoryAlias","modalAlias","getUniqueMethod","#getUnique","entry","#itemManager","UmbRepositoryItemsManager","value","selection","pickerData","modalValue","UMB_MODAL_MANAGER_CONTEXT","UmbChangeEvent","unique","item","umbConfirmModal","#removeItem","newSelection"],"mappings":";;;;AASO,MAAMA,UAKHC,EAAkB;AAAA;AAAA;AAAA,EAkC3B,YACCC,GACAC,GACAC,GACAC,GACC;AACD,UAAMH,CAAI,GArBX,KAAQ,OAAO,OAWf,KAAQ,OAAO,GAWd,KAAK,aAAaE,GAClB,KAAKE,KAAaD,MAAoB,CAACE,MAAUA,EAAM,SAEvD,KAAKC,KAAe,IAAIC,EAA0C,MAAMN,GAAiB,KAAKG,EAAU,GAEnG,KAAA,YAAY,KAAKE,GAAa,SAC9B,KAAA,gBAAgB,KAAKA,GAAa;AAAA,EAAA;AAAA,EA5CxCF;AAAA,EAEAE;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,EAsBvC,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,KAAKX,GAAWW,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;"}