sf-multiselect-search 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +28 -0
- package/README.md +1 -0
- package/dist/sf-checklist.d.ts +43 -0
- package/dist/sf-checklist.d.ts.map +1 -0
- package/dist/sf-checklist.js +378 -0
- package/dist/sf-checklist.js.map +1 -0
- package/dist/sf-multiselect-search.d.ts +46 -0
- package/dist/sf-multiselect-search.d.ts.map +1 -0
- package/dist/sf-multiselect-search.js +367 -0
- package/dist/sf-multiselect-search.js.map +1 -0
- package/dist/test/sf-checklist_test.d.ts +7 -0
- package/dist/test/sf-checklist_test.d.ts.map +1 -0
- package/dist/test/sf-checklist_test.js +18 -0
- package/dist/test/sf-checklist_test.js.map +1 -0
- package/dist/util.d.ts +7 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +17 -0
- package/dist/util.js.map +1 -0
- package/package.json +93 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2019 Google LLC. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
16
|
+
contributors may be used to endorse or promote products derived from
|
|
17
|
+
this software without specific prior written permission.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# sf-multiselect-search
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Superflow.dev
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { LitElement, PropertyValueMap } from 'lit';
|
|
7
|
+
/**
|
|
8
|
+
* SfMultiselectSearch element.
|
|
9
|
+
* @fires renderComplete - When the list is populated
|
|
10
|
+
* @fires valueChanged - When the value is changed
|
|
11
|
+
* @property apiId - backend api id
|
|
12
|
+
* @property label - input label
|
|
13
|
+
* @property name - name of the input
|
|
14
|
+
* @property mode - mode of operation
|
|
15
|
+
* @property selectedId - id to preselect
|
|
16
|
+
* @property selectedValue - callback function
|
|
17
|
+
*/
|
|
18
|
+
export declare class SfMultiselectSearch extends LitElement {
|
|
19
|
+
static styles: import("lit").CSSResult;
|
|
20
|
+
mode: string;
|
|
21
|
+
readonly: boolean;
|
|
22
|
+
listname: string;
|
|
23
|
+
listelements: string[];
|
|
24
|
+
listselection: {
|
|
25
|
+
[key: string]: boolean;
|
|
26
|
+
};
|
|
27
|
+
selectedValues: () => {
|
|
28
|
+
[key: string]: boolean;
|
|
29
|
+
};
|
|
30
|
+
dispatchValueChanged: () => void;
|
|
31
|
+
reorderArray<T>(arr: T[], oldIndex: number, newIndex: number): T[];
|
|
32
|
+
reorderMap(map: Map<string, any>, newOrder: string[]): Map<string, any>;
|
|
33
|
+
initListeners: () => void;
|
|
34
|
+
loadMode: () => Promise<void>;
|
|
35
|
+
protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
|
|
36
|
+
connectedCallback(): void;
|
|
37
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
38
|
+
}
|
|
39
|
+
declare global {
|
|
40
|
+
interface HTMLElementTagNameMap {
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=sf-multiselect-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sf-multiselect-search.d.ts","sourceRoot":"","sources":["../src/sf-multiselect-search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAa,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAU9D;;;;;;;;;;GAUG;AACH,qBACa,WAAY,SAAQ,UAAU;IACzC,OAAgB,MAAM,0BAyGpB;IAIF,IAAI,SAAU;IAGd,QAAQ,UAAQ;IAGhB,QAAQ,SAAK;IAGb,YAAY,EAAE,MAAM,EAAE,CAAK;IAuB3B,aAAa,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAK;IAgB9C,cAAc;;MAOb;IACD,oBAAoB,aAQnB;IACD,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE;IAWlE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IASvE,aAAa,aAkDZ;IACD,QAAQ,sBAwDP;cAEkB,YAAY,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,IAAI;IAMnG,iBAAiB;IAGjB,MAAM;CA0BhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;KAC9B;CACF"}
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Superflow.dev
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
7
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
9
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
10
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
11
|
+
};
|
|
12
|
+
import { LitElement, html, css } from 'lit';
|
|
13
|
+
import { customElement, property } from 'lit/decorators.js';
|
|
14
|
+
/*
|
|
15
|
+
|
|
16
|
+
Modes: multiselect, select
|
|
17
|
+
Flows: view,edit
|
|
18
|
+
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* SfMultiselectSearch element.
|
|
22
|
+
* @fires renderComplete - When the list is populated
|
|
23
|
+
* @fires valueChanged - When the value is changed
|
|
24
|
+
* @property apiId - backend api id
|
|
25
|
+
* @property label - input label
|
|
26
|
+
* @property name - name of the input
|
|
27
|
+
* @property mode - mode of operation
|
|
28
|
+
* @property selectedId - id to preselect
|
|
29
|
+
* @property selectedValue - callback function
|
|
30
|
+
*/
|
|
31
|
+
let SfMultiselectSearch = class SfMultiselectSearch extends LitElement {
|
|
32
|
+
constructor() {
|
|
33
|
+
super(...arguments);
|
|
34
|
+
// mode = ""
|
|
35
|
+
this.mode = "admin";
|
|
36
|
+
this.readonly = false;
|
|
37
|
+
// readonly = true
|
|
38
|
+
this.listname = "";
|
|
39
|
+
this.listelements = [];
|
|
40
|
+
// listelements: { name: string }[] = [
|
|
41
|
+
// {
|
|
42
|
+
// "name": "Contract term 1"
|
|
43
|
+
// },
|
|
44
|
+
// {
|
|
45
|
+
// "name": "contract term 2"
|
|
46
|
+
// },
|
|
47
|
+
// {
|
|
48
|
+
// "name": "contract term 3"
|
|
49
|
+
// }
|
|
50
|
+
// ]
|
|
51
|
+
// listelements: { name: string }[] = [{"name": "Terms1"},{"name": "Terms2"}]
|
|
52
|
+
// listelements: { name: string }[] = [
|
|
53
|
+
// {
|
|
54
|
+
// "name": "item 1"
|
|
55
|
+
// },
|
|
56
|
+
// {
|
|
57
|
+
// "name": "item 2"
|
|
58
|
+
// }
|
|
59
|
+
// ]
|
|
60
|
+
this.listselection = {};
|
|
61
|
+
// listselection: { [key: string]: boolean } = {
|
|
62
|
+
// "Contract term 1": true,
|
|
63
|
+
// "contract term 2": true,
|
|
64
|
+
// "contract term 3": true
|
|
65
|
+
// }
|
|
66
|
+
// listselection: any = {
|
|
67
|
+
// "First term": true,
|
|
68
|
+
// "Second term": true
|
|
69
|
+
// }
|
|
70
|
+
// listselection: any = {
|
|
71
|
+
// "Check 1": true,
|
|
72
|
+
// "Check 2": false,
|
|
73
|
+
// "Check 3": true
|
|
74
|
+
// }
|
|
75
|
+
this.selectedValues = () => {
|
|
76
|
+
console.log('checklist selectedvalues', JSON.stringify(this.listselection));
|
|
77
|
+
let retObj = {};
|
|
78
|
+
for (let key of this.listelements) {
|
|
79
|
+
retObj[key] = this.listselection[key] ?? false;
|
|
80
|
+
}
|
|
81
|
+
return this.listselection;
|
|
82
|
+
};
|
|
83
|
+
this.dispatchValueChanged = () => {
|
|
84
|
+
console.log("dispatchValueChanged");
|
|
85
|
+
let customEvent = new CustomEvent('valueChanged', {
|
|
86
|
+
detail: { source: 'InnerElement', id: this.id },
|
|
87
|
+
bubbles: true,
|
|
88
|
+
composed: true
|
|
89
|
+
});
|
|
90
|
+
this.dispatchEvent(customEvent);
|
|
91
|
+
};
|
|
92
|
+
this.initListeners = () => {
|
|
93
|
+
let addButton = this.shadowRoot?.getElementById("add-button");
|
|
94
|
+
let addInput = this.shadowRoot?.getElementById("add-input");
|
|
95
|
+
addButton?.addEventListener("click", () => {
|
|
96
|
+
let newItem = addInput?.value;
|
|
97
|
+
if (newItem) {
|
|
98
|
+
// this.listelements.push({ name: newItem });
|
|
99
|
+
this.listselection[newItem] = false;
|
|
100
|
+
addInput.value = "";
|
|
101
|
+
this.dispatchValueChanged();
|
|
102
|
+
this.loadMode();
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
let deleteButtons = this.shadowRoot?.querySelectorAll('.button-delete');
|
|
106
|
+
for (let deleteButton of deleteButtons) {
|
|
107
|
+
deleteButton.addEventListener('click', () => {
|
|
108
|
+
let id = deleteButton.id;
|
|
109
|
+
let index = parseInt(id.split('-')[2]);
|
|
110
|
+
let listelement = this.listelements[index];
|
|
111
|
+
this.listelements.splice(index, 1);
|
|
112
|
+
delete this.listselection[listelement];
|
|
113
|
+
this.dispatchValueChanged();
|
|
114
|
+
this.loadMode();
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
let upButtons = this.shadowRoot?.querySelectorAll('.button-up');
|
|
118
|
+
for (let upButton of upButtons) {
|
|
119
|
+
upButton.addEventListener('click', () => {
|
|
120
|
+
let id = upButton.id;
|
|
121
|
+
let index = parseInt(id.split('-')[2]);
|
|
122
|
+
this.listelements = this.reorderArray(this.listelements, index, index - 1);
|
|
123
|
+
let newMap = this.reorderMap(new Map(Object.entries(this.listselection)), this.listelements);
|
|
124
|
+
this.listselection = Object.fromEntries(newMap);
|
|
125
|
+
this.dispatchValueChanged();
|
|
126
|
+
this.loadMode();
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
let downButtons = this.shadowRoot?.querySelectorAll('.button-down');
|
|
130
|
+
for (let downButton of downButtons) {
|
|
131
|
+
downButton.addEventListener('click', () => {
|
|
132
|
+
let id = downButton.id;
|
|
133
|
+
let index = parseInt(id.split('-')[2]);
|
|
134
|
+
this.listelements = this.reorderArray(this.listelements, index, index + 1);
|
|
135
|
+
let newMap = this.reorderMap(new Map(Object.entries(this.listselection)), this.listelements);
|
|
136
|
+
this.listselection = Object.fromEntries(newMap);
|
|
137
|
+
this.dispatchValueChanged();
|
|
138
|
+
this.loadMode();
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
this.loadMode = async () => {
|
|
143
|
+
console.log("loadMode", this.mode, this.listelements, this.listselection);
|
|
144
|
+
this.listelements = Object.keys(this.listselection);
|
|
145
|
+
if (this.mode == "admin") {
|
|
146
|
+
let checklistInputContainer = this.shadowRoot?.getElementById('checklist-input-container');
|
|
147
|
+
checklistInputContainer.style.display = this.readonly ? 'none' : 'flex';
|
|
148
|
+
let checklistList = this.shadowRoot?.getElementById("checklist-list");
|
|
149
|
+
let innerHTML = '';
|
|
150
|
+
if (Array.isArray(this.listelements)) {
|
|
151
|
+
this.listelements.map((item, index) => {
|
|
152
|
+
innerHTML += `
|
|
153
|
+
<div part="checklist-item" class="d-flex align-center">
|
|
154
|
+
<label part="checklist-checkbox-label">${(item ?? "")}</label>${!this.readonly && index > 0 ? `<button id="button-up-${index}" part="button-icon" class="mrl-5 material-symbols-outlined button-up">arrow_upward</button>` : ''}${!this.readonly && index < (this.listelements.length - 1) ? `<button id="button-down-${index}" part="button-icon" class="mrl-5 material-symbols-outlined button-down">arrow_downward</button>` : ''}${!this.readonly ? `<button id="button-delete-${index}" part="button-icon" class="mrl-5 material-icons button-delete">delete</button>` : ''}
|
|
155
|
+
</div>
|
|
156
|
+
`;
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
checklistList.innerHTML = innerHTML;
|
|
160
|
+
console.log("checklistList", checklistList.innerHTML);
|
|
161
|
+
if (!this.readonly) {
|
|
162
|
+
this.initListeners();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
let checklistList = this.shadowRoot?.getElementById("checklist-list");
|
|
167
|
+
let innerHTML = '';
|
|
168
|
+
if (Array.isArray(this.listelements)) {
|
|
169
|
+
this.listelements.map((item) => {
|
|
170
|
+
console.log('sf-multiselect-searcht rendering checkbox', this.listselection[(item ?? "")]);
|
|
171
|
+
innerHTML += `
|
|
172
|
+
<div part="checklist-item" class="d-flex">
|
|
173
|
+
<input part="checklist-checkbox" type="checkbox" id="checkbox-${(item ?? "").replace(/ /g, '-')}" name="${(item ?? "")}" value="${(item ?? "")}" ${(this.listselection[(item ?? "")] ?? false) ? "checked" : ""} ${this.readonly ? "disabled" : ""}/>
|
|
174
|
+
<label part="checklist-checkbox-label" for="checkbox-${(item ?? "").replace(/ /g, '-')}">${(item ?? "")}</label>
|
|
175
|
+
</div>
|
|
176
|
+
`;
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
checklistList.innerHTML = innerHTML;
|
|
180
|
+
for (const item of this.listelements) {
|
|
181
|
+
const checkbox = this.shadowRoot?.getElementById(`checkbox-${(item ?? "").replace(/ /g, '-')}`);
|
|
182
|
+
if (checkbox) {
|
|
183
|
+
checkbox.addEventListener('change', () => {
|
|
184
|
+
const name = item ?? "";
|
|
185
|
+
this.listselection = {
|
|
186
|
+
...this.listselection,
|
|
187
|
+
[name]: checkbox.checked
|
|
188
|
+
};
|
|
189
|
+
console.log('checklist selected', this.listselection, typeof (this.listselection));
|
|
190
|
+
this.dispatchValueChanged();
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
if (this.listselection[(item ?? "")] == null) {
|
|
194
|
+
this.listselection[(item ?? "")] = false;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
this.dispatchValueChanged();
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
reorderArray(arr, oldIndex, newIndex) {
|
|
202
|
+
if (oldIndex === newIndex) {
|
|
203
|
+
return arr;
|
|
204
|
+
}
|
|
205
|
+
const newArr = [...arr];
|
|
206
|
+
const [item] = newArr.splice(oldIndex, 1);
|
|
207
|
+
newArr.splice(newIndex, 0, item);
|
|
208
|
+
return newArr;
|
|
209
|
+
}
|
|
210
|
+
reorderMap(map, newOrder) {
|
|
211
|
+
const reordered = new Map();
|
|
212
|
+
for (const key of newOrder) {
|
|
213
|
+
if (map.has(key)) {
|
|
214
|
+
reordered.set(key, map.get(key));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return reordered;
|
|
218
|
+
}
|
|
219
|
+
firstUpdated(_changedProperties) {
|
|
220
|
+
this.loadMode();
|
|
221
|
+
}
|
|
222
|
+
connectedCallback() {
|
|
223
|
+
super.connectedCallback();
|
|
224
|
+
}
|
|
225
|
+
render() {
|
|
226
|
+
if (this.mode == "admin") {
|
|
227
|
+
return html `
|
|
228
|
+
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
|
229
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0" />
|
|
230
|
+
<div part="checklist-container" class="d-flex flex-col">
|
|
231
|
+
${this.listname != "" ? `<h2 part="checklist-title">${this.listname}</h2>` : ''}
|
|
232
|
+
<div id="checklist-input-container" part="checklist-input-container" class="d-flex">
|
|
233
|
+
<input part="checklist-add-input" type="text" id="add-input" name="add-input" value="" placeholder="Add new item" />
|
|
234
|
+
<button id="add-button" part="checklist-add-button" class="ml-10">Add</button>
|
|
235
|
+
</div>
|
|
236
|
+
<div id="checklist-list" part="checklist-list" class="d-flex flex-col flex-wrap justify-center w-100-m-0">
|
|
237
|
+
</div>
|
|
238
|
+
</div>
|
|
239
|
+
`;
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
return html `
|
|
243
|
+
<div part="checklist-container" class="d-flex">
|
|
244
|
+
${this.listname != "" ? `<h2 part="checklist-title">${this.listname}</h2>` : ''}
|
|
245
|
+
<div id="checklist-list" part="checklist-list" class="d-flex flex-col flex-wrap justify-center w-100-m-0">
|
|
246
|
+
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
`;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
SfMultiselectSearch.styles = css `
|
|
254
|
+
:root {
|
|
255
|
+
--color: #fcc419;
|
|
256
|
+
--shadow: #f08c00;
|
|
257
|
+
--glare: hsl(0 0% 100% / 0.75);
|
|
258
|
+
--font-size: clamp(.75rem, 2vw, 1rem);
|
|
259
|
+
--transition: 0.2s;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
* {
|
|
263
|
+
box-sizing: border-box;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.d-flex {
|
|
267
|
+
display: flex;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.flex-col {
|
|
271
|
+
flex-direction: column;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.flex-wrap {
|
|
275
|
+
flex-wrap: wrap;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.justify-center {
|
|
279
|
+
justify-content: center;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.justify-between {
|
|
283
|
+
justify-content: space-between;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.justify-end {
|
|
287
|
+
justify-content: flex-end;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.w-100-m-0 {
|
|
291
|
+
width: 100%;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
.mb-20 {
|
|
295
|
+
margin-bottom: 20px;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.mt-20 {
|
|
299
|
+
margin-top: 20px;
|
|
300
|
+
}
|
|
301
|
+
.mr-10 {
|
|
302
|
+
margin-right: 10px;
|
|
303
|
+
}
|
|
304
|
+
.m-0 {
|
|
305
|
+
margin: 0px;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
.m-20 {
|
|
309
|
+
margin: 20px;
|
|
310
|
+
}
|
|
311
|
+
.md-20-ml-10 {
|
|
312
|
+
margin-top: 20px;
|
|
313
|
+
margin-bottom: 20px;
|
|
314
|
+
margin-left: 10px;
|
|
315
|
+
margin-right: 10px;
|
|
316
|
+
}
|
|
317
|
+
.mrl-5 {
|
|
318
|
+
margin-left: 5px;
|
|
319
|
+
margin-right: 5px;
|
|
320
|
+
}
|
|
321
|
+
.mrl-10 {
|
|
322
|
+
margin-left: 10px;
|
|
323
|
+
margin-right: 10px;
|
|
324
|
+
}
|
|
325
|
+
.mt-10{
|
|
326
|
+
margin-top: 10px
|
|
327
|
+
}
|
|
328
|
+
.ml-10{
|
|
329
|
+
margin-left: 10px
|
|
330
|
+
}
|
|
331
|
+
.mr-20{
|
|
332
|
+
margin-right: 20px
|
|
333
|
+
}
|
|
334
|
+
.flex-grow {
|
|
335
|
+
flex-grow: 1;
|
|
336
|
+
}
|
|
337
|
+
.align-start {
|
|
338
|
+
align-items: flex-start;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
.align-end {
|
|
342
|
+
align-items: flex-end;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
.align-center {
|
|
346
|
+
align-items: center;
|
|
347
|
+
}
|
|
348
|
+
.align-stretch {
|
|
349
|
+
align-items: stretch;
|
|
350
|
+
}
|
|
351
|
+
body {
|
|
352
|
+
display: grid;
|
|
353
|
+
place-items: center;
|
|
354
|
+
min-height: 100vh;
|
|
355
|
+
font-family: 'Google Sans', sans-serif, system-ui;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
`;
|
|
359
|
+
__decorate([
|
|
360
|
+
property({ type: String })
|
|
361
|
+
], SfMultiselectSearch.prototype, "mode", void 0);
|
|
362
|
+
__decorate([
|
|
363
|
+
property({ type: Boolean })
|
|
364
|
+
], SfMultiselectSearch.prototype, "readonly", void 0);
|
|
365
|
+
__decorate([
|
|
366
|
+
property()
|
|
367
|
+
], SfMultiselectSearch.prototype, "listname", void 0);
|
|
368
|
+
__decorate([
|
|
369
|
+
property({ type: Array })
|
|
370
|
+
], SfMultiselectSearch.prototype, "listelements", void 0);
|
|
371
|
+
__decorate([
|
|
372
|
+
property({ type: Object })
|
|
373
|
+
], SfMultiselectSearch.prototype, "listselection", void 0);
|
|
374
|
+
SfMultiselectSearch = __decorate([
|
|
375
|
+
customElement('sf-multiselect-search')
|
|
376
|
+
], SfMultiselectSearch);
|
|
377
|
+
export { SfMultiselectSearch };
|
|
378
|
+
//# sourceMappingURL=sf-multiselect-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sf-multiselect-search.js","sourceRoot":"","sources":["../src/sf-multiselect-search.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2022 Superflow.dev\n * SPDX-License-Identifier: MIT\n */\n\nimport { LitElement, html, css, PropertyValueMap } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n/*\n\nModes: multiselect, select\nFlows: view,edit\n\n*/\n\n/**\n * SfMultiselectSearch element.\n * @fires renderComplete - When the list is populated\n * @fires valueChanged - When the value is changed\n * @property apiId - backend api id\n * @property label - input label\n * @property name - name of the input\n * @property mode - mode of operation\n * @property selectedId - id to preselect\n * @property selectedValue - callback function\n */\n@customElement('sf-multiselect-search')\nexport class SfMultiselectSearch extends LitElement {\n static override styles = css`\n :root {\n --color: #fcc419;\n --shadow: #f08c00;\n --glare: hsl(0 0% 100% / 0.75);\n --font-size: clamp(.75rem, 2vw, 1rem);\n --transition: 0.2s;\n }\n\n * {\n box-sizing: border-box;\n }\n\n .d-flex {\n display: flex;\n }\n\n .flex-col {\n flex-direction: column;\n }\n\n .flex-wrap {\n flex-wrap: wrap;\n }\n\n .justify-center {\n justify-content: center;\n }\n\n .justify-between {\n justify-content: space-between;\n }\n\n .justify-end {\n justify-content: flex-end;\n }\n\n .w-100-m-0 {\n width: 100%;\n }\n \n .mb-20 {\n margin-bottom: 20px;\n }\n \n .mt-20 {\n margin-top: 20px;\n }\n .mr-10 {\n margin-right: 10px;\n }\n .m-0 {\n margin: 0px;\n }\n\n .m-20 {\n margin: 20px;\n }\n .md-20-ml-10 {\n margin-top: 20px;\n margin-bottom: 20px;\n margin-left: 10px;\n margin-right: 10px;\n }\n .mrl-5 {\n margin-left: 5px;\n margin-right: 5px;\n }\n .mrl-10 {\n margin-left: 10px;\n margin-right: 10px;\n }\n .mt-10{\n margin-top: 10px\n }\n .ml-10{\n margin-left: 10px\n }\n .mr-20{\n margin-right: 20px\n }\n .flex-grow {\n flex-grow: 1;\n }\n .align-start {\n align-items: flex-start;\n }\n\n .align-end {\n align-items: flex-end;\n }\n\n .align-center {\n align-items: center;\n }\n .align-stretch {\n align-items: stretch;\n }\n body {\n display: grid;\n place-items: center;\n min-height: 100vh;\n font-family: 'Google Sans', sans-serif, system-ui;\n }\n\n `;\n\n @property({ type: String })\n // mode = \"\"\n mode = \"admin\"\n\n @property({ type: Boolean })\n readonly = false\n // readonly = true\n @property()\n listname = \"\"\n\n @property({ type: Array })\n listelements: string[] = []\n// listelements: { name: string }[] = [\n// {\n// \"name\": \"Contract term 1\"\n// },\n// {\n// \"name\": \"contract term 2\"\n// },\n// {\n// \"name\": \"contract term 3\"\n// }\n// ]\n // listelements: { name: string }[] = [{\"name\": \"Terms1\"},{\"name\": \"Terms2\"}]\n // listelements: { name: string }[] = [\n // {\n // \"name\": \"item 1\"\n // },\n // {\n // \"name\": \"item 2\"\n // }\n // ]\n\n @property({ type: Object })\n listselection: { [key: string]: boolean } = {}\n// listselection: { [key: string]: boolean } = {\n// \"Contract term 1\": true,\n// \"contract term 2\": true,\n// \"contract term 3\": true\n// }\n // listselection: any = {\n // \"First term\": true,\n // \"Second term\": true\n // }\n // listselection: any = {\n // \"Check 1\": true,\n // \"Check 2\": false,\n // \"Check 3\": true\n // }\n\n selectedValues = () => {\n console.log('checklist selectedvalues', JSON.stringify(this.listselection))\n let retObj: { [key: string]: boolean } = {}\n for (let key of this.listelements) {\n retObj[key] = this.listselection[key] ?? false\n }\n return this.listselection\n }\n dispatchValueChanged = () => {\n console.log(\"dispatchValueChanged\");\n let customEvent = new CustomEvent('valueChanged', {\n detail: { source: 'InnerElement', id: this.id },\n bubbles: true,\n composed: true\n });\n this.dispatchEvent(customEvent);\n }\n reorderArray<T>(arr: T[], oldIndex: number, newIndex: number): T[] {\n if (oldIndex === newIndex) {\n return arr;\n }\n\n const newArr = [...arr];\n const [item] = newArr.splice(oldIndex, 1);\n newArr.splice(newIndex, 0, item);\n\n return newArr;\n }\n reorderMap(map: Map<string, any>, newOrder: string[]): Map<string, any> {\n const reordered = new Map<string, any>();\n for (const key of newOrder) {\n if (map.has(key)) {\n reordered.set(key, map.get(key));\n }\n }\n return reordered;\n }\n initListeners = () => {\n let addButton = this.shadowRoot?.getElementById(\"add-button\") as HTMLButtonElement;\n let addInput = this.shadowRoot?.getElementById(\"add-input\") as HTMLInputElement;\n addButton?.addEventListener(\"click\", () => {\n let newItem = addInput?.value;\n if (newItem) {\n // this.listelements.push({ name: newItem });\n this.listselection[newItem] = false;\n addInput.value = \"\";\n this.dispatchValueChanged()\n this.loadMode();\n }\n })\n\n let deleteButtons = this.shadowRoot?.querySelectorAll('.button-delete') as NodeListOf<HTMLButtonElement>\n for (let deleteButton of deleteButtons) {\n deleteButton.addEventListener('click', () => {\n let id = deleteButton.id\n let index = parseInt(id.split('-')[2])\n let listelement = this.listelements[index]\n this.listelements.splice(index, 1)\n delete this.listselection[listelement]\n this.dispatchValueChanged()\n this.loadMode();\n })\n }\n let upButtons = this.shadowRoot?.querySelectorAll('.button-up') as NodeListOf<HTMLButtonElement>\n for (let upButton of upButtons) {\n upButton.addEventListener('click', () => {\n let id = upButton.id\n let index = parseInt(id.split('-')[2])\n this.listelements = this.reorderArray(this.listelements, index, index - 1)\n let newMap = this.reorderMap(new Map(Object.entries(this.listselection)), this.listelements)\n this.listselection = Object.fromEntries(newMap)\n this.dispatchValueChanged()\n this.loadMode();\n })\n }\n let downButtons = this.shadowRoot?.querySelectorAll('.button-down') as NodeListOf<HTMLButtonElement>\n for (let downButton of downButtons) {\n downButton.addEventListener('click', () => {\n let id = downButton.id\n let index = parseInt(id.split('-')[2])\n this.listelements = this.reorderArray(this.listelements, index, index + 1)\n let newMap = this.reorderMap(new Map(Object.entries(this.listselection)), this.listelements)\n this.listselection = Object.fromEntries(newMap)\n this.dispatchValueChanged()\n this.loadMode();\n })\n }\n }\n loadMode = async () => {\n console.log(\"loadMode\", this.mode, this.listelements, this.listselection);\n this.listelements = Object.keys(this.listselection)\n if (this.mode == \"admin\") {\n let checklistInputContainer = this.shadowRoot?.getElementById('checklist-input-container') as HTMLDivElement\n checklistInputContainer.style.display = this.readonly ? 'none' : 'flex';\n let checklistList = this.shadowRoot?.getElementById(\"checklist-list\") as HTMLDivElement;\n let innerHTML = ''\n if (Array.isArray(this.listelements)) {\n this.listelements.map((item, index) => {\n innerHTML += `\n <div part=\"checklist-item\" class=\"d-flex align-center\">\n <label part=\"checklist-checkbox-label\">${(item ?? \"\")}</label>${!this.readonly && index > 0 ? `<button id=\"button-up-${index}\" part=\"button-icon\" class=\"mrl-5 material-symbols-outlined button-up\">arrow_upward</button>` : ''}${!this.readonly && index < (this.listelements.length - 1) ? `<button id=\"button-down-${index}\" part=\"button-icon\" class=\"mrl-5 material-symbols-outlined button-down\">arrow_downward</button>` : ''}${!this.readonly ? `<button id=\"button-delete-${index}\" part=\"button-icon\" class=\"mrl-5 material-icons button-delete\">delete</button>` : ''}\n </div>\n `});\n }\n checklistList.innerHTML = innerHTML;\n console.log(\"checklistList\", checklistList.innerHTML);\n if (!this.readonly) {\n this.initListeners();\n }\n } else {\n let checklistList = this.shadowRoot?.getElementById(\"checklist-list\") as HTMLDivElement;\n let innerHTML = ''\n if (Array.isArray(this.listelements)) {\n this.listelements.map((item) => {\n console.log('sf-multiselect-searcht rendering checkbox', this.listselection[(item ?? \"\")])\n innerHTML += `\n <div part=\"checklist-item\" class=\"d-flex\">\n <input part=\"checklist-checkbox\" type=\"checkbox\" id=\"checkbox-${(item ?? \"\").replace(/ /g, '-')}\" name=\"${(item ?? \"\")}\" value=\"${(item ?? \"\")}\" ${(this.listselection[(item ?? \"\")] ?? false) ? \"checked\" : \"\"} ${this.readonly ? \"disabled\" : \"\"}/>\n <label part=\"checklist-checkbox-label\" for=\"checkbox-${(item ?? \"\").replace(/ /g, '-')}\">${(item ?? \"\")}</label>\n </div>\n `});\n }\n checklistList.innerHTML = innerHTML;\n\n for (const item of this.listelements) {\n const checkbox = this.shadowRoot?.getElementById(`checkbox-${(item ?? \"\").replace(/ /g, '-')}`) as HTMLInputElement;\n if (checkbox) {\n checkbox.addEventListener('change', () => {\n const name = item ?? \"\";\n this.listselection = {\n ...this.listselection,\n [name]: checkbox.checked\n };\n console.log('checklist selected', this.listselection, typeof (this.listselection));\n this.dispatchValueChanged()\n });\n }\n if (this.listselection[(item ?? \"\")] == null) {\n this.listselection[(item ?? \"\")] = false;\n }\n }\n\n this.dispatchValueChanged();\n }\n }\n\n protected override firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void {\n\n this.loadMode();\n\n }\n\n override connectedCallback() {\n super.connectedCallback()\n }\n override render() {\n if (this.mode == \"admin\") {\n return html`\n <link href=\"https://fonts.googleapis.com/icon?family=Material+Icons\" rel=\"stylesheet\">\n <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\" />\n <div part=\"checklist-container\" class=\"d-flex flex-col\"> \n ${this.listname != \"\" ? `<h2 part=\"checklist-title\">${this.listname}</h2>` : ''}\n <div id=\"checklist-input-container\" part=\"checklist-input-container\" class=\"d-flex\">\n <input part=\"checklist-add-input\" type=\"text\" id=\"add-input\" name=\"add-input\" value=\"\" placeholder=\"Add new item\" />\n <button id=\"add-button\" part=\"checklist-add-button\" class=\"ml-10\">Add</button>\n </div>\n <div id=\"checklist-list\" part=\"checklist-list\" class=\"d-flex flex-col flex-wrap justify-center w-100-m-0\">\n </div>\n </div>\n `;\n } else {\n return html`\n <div part=\"checklist-container\" class=\"d-flex\"> \n ${this.listname != \"\" ? `<h2 part=\"checklist-title\">${this.listname}</h2>` : ''}\n <div id=\"checklist-list\" part=\"checklist-list\" class=\"d-flex flex-col flex-wrap justify-center w-100-m-0\">\n \n </div>\n </div>\n `;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n }\n}\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Superflow.dev
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { LitElement, PropertyValueMap } from 'lit';
|
|
7
|
+
/**
|
|
8
|
+
* SfMultiselectSearch element.
|
|
9
|
+
* @fires renderComplete - When the list is populated
|
|
10
|
+
* @fires valueChanged - When the value is changed
|
|
11
|
+
* @property apiId - backend api id
|
|
12
|
+
* @property label - input label
|
|
13
|
+
* @property name - name of the input
|
|
14
|
+
* @property mode - mode of operation
|
|
15
|
+
* @property selectedId - id to preselect
|
|
16
|
+
* @property selectedValue - callback function
|
|
17
|
+
*/
|
|
18
|
+
export declare class SfMultiselectSearch extends LitElement {
|
|
19
|
+
static styles: import("lit").CSSResult;
|
|
20
|
+
mode: string;
|
|
21
|
+
readonly: boolean;
|
|
22
|
+
listname: string;
|
|
23
|
+
listelements: {
|
|
24
|
+
name: string;
|
|
25
|
+
id: string;
|
|
26
|
+
}[];
|
|
27
|
+
listselection: {
|
|
28
|
+
[key: string]: boolean;
|
|
29
|
+
};
|
|
30
|
+
selectedValues: () => {
|
|
31
|
+
[key: string]: boolean;
|
|
32
|
+
};
|
|
33
|
+
dispatchValueChanged: () => void;
|
|
34
|
+
initListeners: () => void;
|
|
35
|
+
populateSelectedList: () => void;
|
|
36
|
+
populateList: () => void;
|
|
37
|
+
loadMode: () => Promise<void>;
|
|
38
|
+
protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
|
|
39
|
+
connectedCallback(): void;
|
|
40
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
41
|
+
}
|
|
42
|
+
declare global {
|
|
43
|
+
interface HTMLElementTagNameMap {
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=sf-multiselect-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sf-multiselect-search.d.ts","sourceRoot":"","sources":["../src/sf-multiselect-search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAa,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAU9D;;;;;;;;;;GAUG;AACH,qBACa,mBAAoB,SAAQ,UAAU;IACjD,OAAgB,MAAM,0BA8GpB;IAIF,IAAI,SAAU;IAGd,QAAQ,UAAQ;IAGhB,QAAQ,SAAK;IAIb,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAa3C;IAYD,aAAa,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAK;IAgB9C,cAAc;;MASb;IACD,oBAAoB,aAUnB;IAED,aAAa,aA6BZ;IAED,oBAAoB,aAsCnB;IAED,YAAY,aAyCX;IAED,QAAQ,sBAOP;cAEkB,YAAY,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,IAAI;IAMnG,iBAAiB;IAGjB,MAAM;CAehB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;KAC9B;CACF"}
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Superflow.dev
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
7
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
9
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
10
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
11
|
+
};
|
|
12
|
+
import { LitElement, html, css } from 'lit';
|
|
13
|
+
import { customElement, property } from 'lit/decorators.js';
|
|
14
|
+
/*
|
|
15
|
+
|
|
16
|
+
Modes: multiselect, select
|
|
17
|
+
Flows: view,edit
|
|
18
|
+
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* SfMultiselectSearch element.
|
|
22
|
+
* @fires renderComplete - When the list is populated
|
|
23
|
+
* @fires valueChanged - When the value is changed
|
|
24
|
+
* @property apiId - backend api id
|
|
25
|
+
* @property label - input label
|
|
26
|
+
* @property name - name of the input
|
|
27
|
+
* @property mode - mode of operation
|
|
28
|
+
* @property selectedId - id to preselect
|
|
29
|
+
* @property selectedValue - callback function
|
|
30
|
+
*/
|
|
31
|
+
let SfMultiselectSearch = class SfMultiselectSearch extends LitElement {
|
|
32
|
+
constructor() {
|
|
33
|
+
super(...arguments);
|
|
34
|
+
// mode = ""
|
|
35
|
+
this.mode = "admin";
|
|
36
|
+
this.readonly = false;
|
|
37
|
+
// readonly = true
|
|
38
|
+
this.listname = "";
|
|
39
|
+
// listelements: string[] = []
|
|
40
|
+
this.listelements = [
|
|
41
|
+
{
|
|
42
|
+
"name": "Contract term 1",
|
|
43
|
+
"id": "ct1"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "contract term 2",
|
|
47
|
+
"id": "ct2"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "contract term 3",
|
|
51
|
+
"id": "ct3"
|
|
52
|
+
}
|
|
53
|
+
];
|
|
54
|
+
// listelements: { name: string }[] = [{"name": "Terms1"},{"name": "Terms2"}]
|
|
55
|
+
// listelements: { name: string }[] = [
|
|
56
|
+
// {
|
|
57
|
+
// "name": "item 1"
|
|
58
|
+
// },
|
|
59
|
+
// {
|
|
60
|
+
// "name": "item 2"
|
|
61
|
+
// }
|
|
62
|
+
// ]
|
|
63
|
+
this.listselection = {};
|
|
64
|
+
// listselection: { [key: string]: boolean } = {
|
|
65
|
+
// "Contract term 1": true,
|
|
66
|
+
// "contract term 2": true,
|
|
67
|
+
// "contract term 3": true
|
|
68
|
+
// }
|
|
69
|
+
// listselection: any = {
|
|
70
|
+
// "First term": true,
|
|
71
|
+
// "Second term": true
|
|
72
|
+
// }
|
|
73
|
+
// listselection: any = {
|
|
74
|
+
// "Check 1": true,
|
|
75
|
+
// "Check 2": false,
|
|
76
|
+
// "Check 3": true
|
|
77
|
+
// }
|
|
78
|
+
this.selectedValues = () => {
|
|
79
|
+
console.log('multiselect selectedvalues', JSON.stringify(this.listselection));
|
|
80
|
+
let retObj = {};
|
|
81
|
+
for (let key of this.listelements) {
|
|
82
|
+
if (this.listselection[key.id] == null && this.listselection[key.id] !== false) {
|
|
83
|
+
retObj[key.id] = this.listselection[key.id];
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return retObj;
|
|
87
|
+
};
|
|
88
|
+
this.dispatchValueChanged = () => {
|
|
89
|
+
console.log("dispatchValueChanged");
|
|
90
|
+
this.populateSelectedList();
|
|
91
|
+
let customEvent = new CustomEvent('valueChanged', {
|
|
92
|
+
detail: { source: 'InnerElement', id: this.id },
|
|
93
|
+
bubbles: true,
|
|
94
|
+
composed: true
|
|
95
|
+
});
|
|
96
|
+
this.dispatchEvent(customEvent);
|
|
97
|
+
};
|
|
98
|
+
this.initListeners = () => {
|
|
99
|
+
let dropDownButton = this.shadowRoot?.getElementById("dropdown-button");
|
|
100
|
+
console.log("dropdownButton", dropDownButton.innerHTML);
|
|
101
|
+
dropDownButton.addEventListener('click', (e) => {
|
|
102
|
+
let multiselectList = this.shadowRoot?.getElementById("select-list");
|
|
103
|
+
console.log("checklistList", multiselectList.classList);
|
|
104
|
+
let button = e.target;
|
|
105
|
+
if (button.innerHTML === "keyboard_arrow_down") {
|
|
106
|
+
multiselectList.classList.remove("hide");
|
|
107
|
+
button.innerHTML = "keyboard_arrow_up";
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
multiselectList.classList.add("hide");
|
|
111
|
+
button.innerHTML = "keyboard_arrow_down";
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
let searchInput = this.shadowRoot?.getElementById("search-input");
|
|
115
|
+
searchInput.addEventListener('input', (e) => {
|
|
116
|
+
this.populateList();
|
|
117
|
+
let searchInput = e.target;
|
|
118
|
+
let filterText = searchInput.value.toLowerCase();
|
|
119
|
+
if (filterText !== "") {
|
|
120
|
+
let multiselectList = this.shadowRoot?.getElementById("select-list");
|
|
121
|
+
multiselectList.classList.remove("hide");
|
|
122
|
+
let dropdownButton = this.shadowRoot?.getElementById("dropdown-button");
|
|
123
|
+
dropdownButton.innerHTML = "keyboard_arrow_up";
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
this.populateSelectedList = () => {
|
|
128
|
+
let searchInput = this.shadowRoot?.getElementById("search-input");
|
|
129
|
+
let filterText = searchInput.value.toLowerCase();
|
|
130
|
+
console.log("populateSelectedList", this.listelements, filterText);
|
|
131
|
+
let selectedList = this.shadowRoot?.getElementById("selected-list");
|
|
132
|
+
let innerHTML = '';
|
|
133
|
+
if (Array.isArray(this.listelements)) {
|
|
134
|
+
this.listelements.map((item) => {
|
|
135
|
+
console.log('sf-multiselect-searcht rendering checkbox', this.listselection[(item.id ?? "")]);
|
|
136
|
+
if (this.listselection[(item.id ?? "")] !== true) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
innerHTML += `
|
|
140
|
+
<div part="selected-item" class="d-flex align-center mr-10">
|
|
141
|
+
<span id="selected-delete-${(item.id ?? "").replace(/ /g, '-')}" class="material-icons" part="selected-unselect">cancel</span>
|
|
142
|
+
<label part="selected-label" id="selected-label-${(item.id ?? "").replace(/ /g, '-')}">${(item.name ?? "")}</label>
|
|
143
|
+
</div>
|
|
144
|
+
`;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
selectedList.innerHTML = innerHTML;
|
|
148
|
+
for (const item of this.listelements) {
|
|
149
|
+
const deleteSpan = this.shadowRoot?.getElementById(`selected-delete-${(item.id ?? "").replace(/ /g, '-')}`);
|
|
150
|
+
if (deleteSpan != null) {
|
|
151
|
+
deleteSpan.addEventListener('click', () => {
|
|
152
|
+
const id = item.id ?? "";
|
|
153
|
+
delete this.listselection[id];
|
|
154
|
+
this.populateSelectedList();
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
const selectedLabel = this.shadowRoot?.getElementById(`selected-label-${(item.id ?? "").replace(/ /g, '-')}`);
|
|
158
|
+
if (selectedLabel != null) {
|
|
159
|
+
selectedLabel.addEventListener('click', () => {
|
|
160
|
+
const id = item.id ?? "";
|
|
161
|
+
delete this.listselection[id];
|
|
162
|
+
this.populateSelectedList();
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
this.populateList = () => {
|
|
168
|
+
let searchInput = this.shadowRoot?.getElementById("search-input");
|
|
169
|
+
let filterText = searchInput.value.toLowerCase();
|
|
170
|
+
console.log("populateList", this.listelements, filterText);
|
|
171
|
+
let miltiselectList = this.shadowRoot?.getElementById("select-list");
|
|
172
|
+
let innerHTML = '';
|
|
173
|
+
if (Array.isArray(this.listelements)) {
|
|
174
|
+
this.listelements.map((item) => {
|
|
175
|
+
console.log('sf-multiselect-searcht rendering checkbox', this.listselection[(item.id ?? "")]);
|
|
176
|
+
if (filterText !== "" && !(item.name ?? "").toLowerCase().includes(filterText)) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
innerHTML += `
|
|
180
|
+
<div part="multiselect-item" class="d-flex">
|
|
181
|
+
<input part="multiselect-checkbox" type="checkbox" id="checkbox-${(item.id ?? "").replace(/ /g, '-')}" name="${(item.name ?? "")}" value="${(item.id ?? "")}" ${(this.listselection[(item.id ?? "")] ?? false) ? "checked" : ""} ${this.readonly ? "disabled" : ""}/>
|
|
182
|
+
<label part="multiselect-checkbox-label" for="checkbox-${(item.id ?? "").replace(/ /g, '-')}">${(item.name ?? "")}</label>
|
|
183
|
+
</div>
|
|
184
|
+
`;
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
miltiselectList.innerHTML = innerHTML;
|
|
188
|
+
for (const item of this.listelements) {
|
|
189
|
+
const checkbox = this.shadowRoot?.getElementById(`checkbox-${(item.id ?? "").replace(/ /g, '-')}`);
|
|
190
|
+
if (checkbox) {
|
|
191
|
+
checkbox.addEventListener('change', () => {
|
|
192
|
+
const id = item.id ?? "";
|
|
193
|
+
this.listselection = {
|
|
194
|
+
...this.listselection,
|
|
195
|
+
[id]: checkbox.checked
|
|
196
|
+
};
|
|
197
|
+
console.log('checklist selected', this.listselection, typeof (this.listselection));
|
|
198
|
+
this.dispatchValueChanged();
|
|
199
|
+
let multiselectList = this.shadowRoot?.getElementById("select-list");
|
|
200
|
+
multiselectList.classList.add("hide");
|
|
201
|
+
let dropdownButton = this.shadowRoot?.getElementById("dropdown-button");
|
|
202
|
+
dropdownButton.innerHTML = "keyboard_arrow_down";
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
this.loadMode = async () => {
|
|
208
|
+
console.log("loadMode", this.mode, this.listelements, this.listselection);
|
|
209
|
+
// this.listelements = Object.keys(this.listselection)
|
|
210
|
+
this.populateList();
|
|
211
|
+
this.dispatchValueChanged();
|
|
212
|
+
this.initListeners();
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
firstUpdated(_changedProperties) {
|
|
216
|
+
this.loadMode();
|
|
217
|
+
}
|
|
218
|
+
connectedCallback() {
|
|
219
|
+
super.connectedCallback();
|
|
220
|
+
}
|
|
221
|
+
render() {
|
|
222
|
+
return html `
|
|
223
|
+
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
|
224
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0" />
|
|
225
|
+
<div part="multiselect-container" class="d-flex flex-col align-stretch">
|
|
226
|
+
${this.listname != "" ? `<h2 part="multiselect-title">${this.listname}</h2>` : ''}
|
|
227
|
+
<div id="multiselect-input-container" part="multiselect-input-container" class="d-flex">
|
|
228
|
+
<input part="input" type="text" id="search-input" name="search-input" class="flex-grow" value="" placeholder="Search"/>
|
|
229
|
+
<button id="dropdown-button" part="button-icon" class="material-icons">keyboard_arrow_down</button>
|
|
230
|
+
</div>
|
|
231
|
+
<div id="select-list" part="select-list" class="hide d-flex flex-col flex-wrap justify-center"></div>
|
|
232
|
+
</div>
|
|
233
|
+
<div id="selected-list" part="selected-list" class="d-flex flex-wrap"></div>
|
|
234
|
+
`;
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
SfMultiselectSearch.styles = css `
|
|
238
|
+
:root {
|
|
239
|
+
--color: #fcc419;
|
|
240
|
+
--shadow: #f08c00;
|
|
241
|
+
--glare: hsl(0 0% 100% / 0.75);
|
|
242
|
+
--font-size: clamp(.75rem, 2vw, 1rem);
|
|
243
|
+
--transition: 0.2s;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
* {
|
|
247
|
+
box-sizing: border-box;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.d-flex {
|
|
251
|
+
display: flex;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.flex-col {
|
|
255
|
+
flex-direction: column;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.flex-wrap {
|
|
259
|
+
flex-wrap: wrap;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.justify-center {
|
|
263
|
+
justify-content: center;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.justify-between {
|
|
267
|
+
justify-content: space-between;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.justify-end {
|
|
271
|
+
justify-content: flex-end;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.w-100-m-0 {
|
|
275
|
+
width: 100%;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.mb-20 {
|
|
279
|
+
margin-bottom: 20px;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.mt-20 {
|
|
283
|
+
margin-top: 20px;
|
|
284
|
+
}
|
|
285
|
+
.mr-10 {
|
|
286
|
+
margin-right: 10px;
|
|
287
|
+
}
|
|
288
|
+
.mr-5 {
|
|
289
|
+
margin-right: 5px;
|
|
290
|
+
}
|
|
291
|
+
.m-0 {
|
|
292
|
+
margin: 0px;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.m-20 {
|
|
296
|
+
margin: 20px;
|
|
297
|
+
}
|
|
298
|
+
.md-20-ml-10 {
|
|
299
|
+
margin-top: 20px;
|
|
300
|
+
margin-bottom: 20px;
|
|
301
|
+
margin-left: 10px;
|
|
302
|
+
margin-right: 10px;
|
|
303
|
+
}
|
|
304
|
+
.mrl-5 {
|
|
305
|
+
margin-left: 5px;
|
|
306
|
+
margin-right: 5px;
|
|
307
|
+
}
|
|
308
|
+
.mrl-10 {
|
|
309
|
+
margin-left: 10px;
|
|
310
|
+
margin-right: 10px;
|
|
311
|
+
}
|
|
312
|
+
.mt-10{
|
|
313
|
+
margin-top: 10px
|
|
314
|
+
}
|
|
315
|
+
.ml-10{
|
|
316
|
+
margin-left: 10px
|
|
317
|
+
}
|
|
318
|
+
.mr-20{
|
|
319
|
+
margin-right: 20px
|
|
320
|
+
}
|
|
321
|
+
.flex-grow {
|
|
322
|
+
flex-grow: 1;
|
|
323
|
+
}
|
|
324
|
+
.align-start {
|
|
325
|
+
align-items: flex-start;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
.align-end {
|
|
329
|
+
align-items: flex-end;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
.align-center {
|
|
333
|
+
align-items: center;
|
|
334
|
+
}
|
|
335
|
+
.align-stretch {
|
|
336
|
+
align-items: stretch;
|
|
337
|
+
}
|
|
338
|
+
body {
|
|
339
|
+
display: grid;
|
|
340
|
+
place-items: center;
|
|
341
|
+
min-height: 100vh;
|
|
342
|
+
font-family: 'Google Sans', sans-serif, system-ui;
|
|
343
|
+
}
|
|
344
|
+
.hide {
|
|
345
|
+
display: none;
|
|
346
|
+
}
|
|
347
|
+
`;
|
|
348
|
+
__decorate([
|
|
349
|
+
property({ type: String })
|
|
350
|
+
], SfMultiselectSearch.prototype, "mode", void 0);
|
|
351
|
+
__decorate([
|
|
352
|
+
property({ type: Boolean })
|
|
353
|
+
], SfMultiselectSearch.prototype, "readonly", void 0);
|
|
354
|
+
__decorate([
|
|
355
|
+
property()
|
|
356
|
+
], SfMultiselectSearch.prototype, "listname", void 0);
|
|
357
|
+
__decorate([
|
|
358
|
+
property({ type: Array })
|
|
359
|
+
], SfMultiselectSearch.prototype, "listelements", void 0);
|
|
360
|
+
__decorate([
|
|
361
|
+
property({ type: Object })
|
|
362
|
+
], SfMultiselectSearch.prototype, "listselection", void 0);
|
|
363
|
+
SfMultiselectSearch = __decorate([
|
|
364
|
+
customElement('sf-multiselect-search')
|
|
365
|
+
], SfMultiselectSearch);
|
|
366
|
+
export { SfMultiselectSearch };
|
|
367
|
+
//# sourceMappingURL=sf-multiselect-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sf-multiselect-search.js","sourceRoot":"","sources":["../src/sf-multiselect-search.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * @license\r\n * Copyright 2022 Superflow.dev\r\n * SPDX-License-Identifier: MIT\r\n */\r\n\r\nimport { LitElement, html, css, PropertyValueMap } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/*\r\n\r\nModes: multiselect, select\r\nFlows: view,edit\r\n\r\n*/\r\n\r\n/**\r\n * SfMultiselectSearch element.\r\n * @fires renderComplete - When the list is populated\r\n * @fires valueChanged - When the value is changed\r\n * @property apiId - backend api id\r\n * @property label - input label\r\n * @property name - name of the input\r\n * @property mode - mode of operation\r\n * @property selectedId - id to preselect\r\n * @property selectedValue - callback function\r\n */\r\n@customElement('sf-multiselect-search')\r\nexport class SfMultiselectSearch extends LitElement {\r\n static override styles = css`\r\n :root {\r\n --color: #fcc419;\r\n --shadow: #f08c00;\r\n --glare: hsl(0 0% 100% / 0.75);\r\n --font-size: clamp(.75rem, 2vw, 1rem);\r\n --transition: 0.2s;\r\n }\r\n\r\n * {\r\n box-sizing: border-box;\r\n }\r\n\r\n .d-flex {\r\n display: flex;\r\n }\r\n\r\n .flex-col {\r\n flex-direction: column;\r\n }\r\n\r\n .flex-wrap {\r\n flex-wrap: wrap;\r\n }\r\n\r\n .justify-center {\r\n justify-content: center;\r\n }\r\n\r\n .justify-between {\r\n justify-content: space-between;\r\n }\r\n\r\n .justify-end {\r\n justify-content: flex-end;\r\n }\r\n\r\n .w-100-m-0 {\r\n width: 100%;\r\n }\r\n \r\n .mb-20 {\r\n margin-bottom: 20px;\r\n }\r\n \r\n .mt-20 {\r\n margin-top: 20px;\r\n }\r\n .mr-10 {\r\n margin-right: 10px;\r\n }\r\n .mr-5 {\r\n margin-right: 5px;\r\n }\r\n .m-0 {\r\n margin: 0px;\r\n }\r\n\r\n .m-20 {\r\n margin: 20px;\r\n }\r\n .md-20-ml-10 {\r\n margin-top: 20px;\r\n margin-bottom: 20px;\r\n margin-left: 10px;\r\n margin-right: 10px;\r\n }\r\n .mrl-5 {\r\n margin-left: 5px;\r\n margin-right: 5px;\r\n }\r\n .mrl-10 {\r\n margin-left: 10px;\r\n margin-right: 10px;\r\n }\r\n .mt-10{\r\n margin-top: 10px\r\n }\r\n .ml-10{\r\n margin-left: 10px\r\n }\r\n .mr-20{\r\n margin-right: 20px\r\n }\r\n .flex-grow {\r\n flex-grow: 1;\r\n }\r\n .align-start {\r\n align-items: flex-start;\r\n }\r\n\r\n .align-end {\r\n align-items: flex-end;\r\n }\r\n\r\n .align-center {\r\n align-items: center;\r\n }\r\n .align-stretch {\r\n align-items: stretch;\r\n }\r\n body {\r\n display: grid;\r\n place-items: center;\r\n min-height: 100vh;\r\n font-family: 'Google Sans', sans-serif, system-ui;\r\n }\r\n .hide {\r\n display: none;\r\n }\r\n `;\r\n\r\n @property({ type: String })\r\n // mode = \"\"\r\n mode = \"admin\"\r\n\r\n @property({ type: Boolean })\r\n readonly = false\r\n // readonly = true\r\n @property()\r\n listname = \"\"\r\n\r\n @property({ type: Array })\r\n // listelements: string[] = []\r\n listelements: { name: string, id: string }[] = [\r\n {\r\n \"name\": \"Contract term 1\",\r\n \"id\": \"ct1\"\r\n },\r\n {\r\n \"name\": \"contract term 2\",\r\n \"id\": \"ct2\"\r\n },\r\n {\r\n \"name\": \"contract term 3\",\r\n \"id\": \"ct3\"\r\n }\r\n ]\r\n // listelements: { name: string }[] = [{\"name\": \"Terms1\"},{\"name\": \"Terms2\"}]\r\n // listelements: { name: string }[] = [\r\n // {\r\n // \"name\": \"item 1\"\r\n // },\r\n // {\r\n // \"name\": \"item 2\"\r\n // }\r\n // ]\r\n\r\n @property({ type: Object })\r\n listselection: { [key: string]: boolean } = {}\r\n // listselection: { [key: string]: boolean } = {\r\n // \"Contract term 1\": true,\r\n // \"contract term 2\": true,\r\n // \"contract term 3\": true\r\n // }\r\n // listselection: any = {\r\n // \"First term\": true,\r\n // \"Second term\": true\r\n // }\r\n // listselection: any = {\r\n // \"Check 1\": true,\r\n // \"Check 2\": false,\r\n // \"Check 3\": true\r\n // }\r\n\r\n selectedValues = () => {\r\n console.log('multiselect selectedvalues', JSON.stringify(this.listselection))\r\n let retObj: { [key: string]: boolean } = {}\r\n for (let key of this.listelements) {\r\n if (this.listselection[key.id] == null && this.listselection[key.id] !== false) {\r\n retObj[key.id] = this.listselection[key.id]\r\n }\r\n }\r\n return retObj\r\n }\r\n dispatchValueChanged = () => {\r\n console.log(\"dispatchValueChanged\");\r\n this.populateSelectedList();\r\n let customEvent = new CustomEvent('valueChanged', {\r\n detail: { source: 'InnerElement', id: this.id },\r\n bubbles: true,\r\n composed: true\r\n });\r\n this.dispatchEvent(customEvent);\r\n\r\n }\r\n\r\n initListeners = () => {\r\n let dropDownButton = this.shadowRoot?.getElementById(\"dropdown-button\") as HTMLButtonElement;\r\n console.log(\"dropdownButton\", dropDownButton.innerHTML);\r\n dropDownButton.addEventListener('click', (e) => {\r\n let multiselectList = this.shadowRoot?.getElementById(\"select-list\") as HTMLDivElement;\r\n console.log(\"checklistList\", multiselectList.classList);\r\n let button = e.target as HTMLButtonElement;\r\n if (button.innerHTML === \"keyboard_arrow_down\") {\r\n multiselectList.classList.remove(\"hide\");\r\n button.innerHTML = \"keyboard_arrow_up\"\r\n } else {\r\n multiselectList.classList.add(\"hide\");\r\n button.innerHTML = \"keyboard_arrow_down\"\r\n }\r\n\r\n })\r\n\r\n let searchInput = this.shadowRoot?.getElementById(\"search-input\") as HTMLInputElement;\r\n searchInput.addEventListener('input', (e) => {\r\n this.populateList();\r\n let searchInput = e.target as HTMLInputElement;\r\n let filterText = searchInput.value.toLowerCase();\r\n if (filterText !== \"\") {\r\n let multiselectList = this.shadowRoot?.getElementById(\"select-list\") as HTMLDivElement;\r\n multiselectList.classList.remove(\"hide\");\r\n let dropdownButton = this.shadowRoot?.getElementById(\"dropdown-button\") as HTMLButtonElement;\r\n dropdownButton.innerHTML = \"keyboard_arrow_up\"\r\n }\r\n })\r\n }\r\n\r\n populateSelectedList = () => {\r\n let searchInput = this.shadowRoot?.getElementById(\"search-input\") as HTMLInputElement;\r\n let filterText = searchInput.value.toLowerCase();\r\n console.log(\"populateSelectedList\", this.listelements, filterText);\r\n let selectedList = this.shadowRoot?.getElementById(\"selected-list\") as HTMLDivElement;\r\n let innerHTML = ''\r\n if (Array.isArray(this.listelements)) {\r\n this.listelements.map((item) => {\r\n console.log('sf-multiselect-searcht rendering checkbox', this.listselection[(item.id ?? \"\")])\r\n if (this.listselection[(item.id ?? \"\")] !== true) {\r\n return;\r\n }\r\n innerHTML += `\r\n <div part=\"selected-item\" class=\"d-flex align-center mr-10\">\r\n <span id=\"selected-delete-${(item.id ?? \"\").replace(/ /g, '-')}\" class=\"material-icons\" part=\"selected-unselect\">cancel</span>\r\n <label part=\"selected-label\" id=\"selected-label-${(item.id ?? \"\").replace(/ /g, '-')}\">${(item.name ?? \"\")}</label>\r\n </div>\r\n `});\r\n }\r\n selectedList.innerHTML = innerHTML;\r\n for (const item of this.listelements) {\r\n const deleteSpan = this.shadowRoot?.getElementById(`selected-delete-${(item.id ?? \"\").replace(/ /g, '-')}`) as HTMLSpanElement;\r\n if (deleteSpan != null) {\r\n deleteSpan.addEventListener('click', () => {\r\n const id = item.id ?? \"\";\r\n delete this.listselection[id];\r\n this.populateSelectedList();\r\n });\r\n }\r\n const selectedLabel = this.shadowRoot?.getElementById(`selected-label-${(item.id ?? \"\").replace(/ /g, '-')}`) as HTMLLabelElement;\r\n if (selectedLabel != null) {\r\n selectedLabel.addEventListener('click', () => {\r\n const id = item.id ?? \"\";\r\n delete this.listselection[id];\r\n this.populateSelectedList();\r\n });\r\n }\r\n }\r\n }\r\n\r\n populateList = () => {\r\n let searchInput = this.shadowRoot?.getElementById(\"search-input\") as HTMLInputElement;\r\n let filterText = searchInput.value.toLowerCase();\r\n console.log(\"populateList\", this.listelements, filterText);\r\n let miltiselectList = this.shadowRoot?.getElementById(\"select-list\") as HTMLDivElement;\r\n let innerHTML = ''\r\n if (Array.isArray(this.listelements)) {\r\n this.listelements.map((item) => {\r\n console.log('sf-multiselect-searcht rendering checkbox', this.listselection[(item.id ?? \"\")])\r\n if (filterText !== \"\" && !(item.name ?? \"\").toLowerCase().includes(filterText)) {\r\n return;\r\n }\r\n innerHTML += `\r\n <div part=\"multiselect-item\" class=\"d-flex\">\r\n <input part=\"multiselect-checkbox\" type=\"checkbox\" id=\"checkbox-${(item.id ?? \"\").replace(/ /g, '-')}\" name=\"${(item.name ?? \"\")}\" value=\"${(item.id ?? \"\")}\" ${(this.listselection[(item.id ?? \"\")] ?? false) ? \"checked\" : \"\"} ${this.readonly ? \"disabled\" : \"\"}/>\r\n <label part=\"multiselect-checkbox-label\" for=\"checkbox-${(item.id ?? \"\").replace(/ /g, '-')}\">${(item.name ?? \"\")}</label>\r\n </div>\r\n `});\r\n }\r\n miltiselectList.innerHTML = innerHTML;\r\n\r\n for (const item of this.listelements) {\r\n const checkbox = this.shadowRoot?.getElementById(`checkbox-${(item.id ?? \"\").replace(/ /g, '-')}`) as HTMLInputElement;\r\n if (checkbox) {\r\n checkbox.addEventListener('change', () => {\r\n const id = item.id ?? \"\";\r\n this.listselection = {\r\n ...this.listselection,\r\n [id]: checkbox.checked\r\n };\r\n console.log('checklist selected', this.listselection, typeof (this.listselection));\r\n this.dispatchValueChanged()\r\n let multiselectList = this.shadowRoot?.getElementById(\"select-list\") as HTMLDivElement;\r\n multiselectList.classList.add(\"hide\");\r\n let dropdownButton = this.shadowRoot?.getElementById(\"dropdown-button\") as HTMLButtonElement;\r\n dropdownButton.innerHTML = \"keyboard_arrow_down\"\r\n });\r\n }\r\n }\r\n\r\n\r\n }\r\n\r\n loadMode = async () => {\r\n console.log(\"loadMode\", this.mode, this.listelements, this.listselection);\r\n // this.listelements = Object.keys(this.listselection)\r\n\r\n this.populateList()\r\n this.dispatchValueChanged();\r\n this.initListeners()\r\n }\r\n\r\n protected override firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void {\r\n\r\n this.loadMode();\r\n\r\n }\r\n\r\n override connectedCallback() {\r\n super.connectedCallback()\r\n }\r\n override render() {\r\n return html`\r\n <link href=\"https://fonts.googleapis.com/icon?family=Material+Icons\" rel=\"stylesheet\">\r\n <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\" />\r\n <div part=\"multiselect-container\" class=\"d-flex flex-col align-stretch\"> \r\n ${this.listname != \"\" ? `<h2 part=\"multiselect-title\">${this.listname}</h2>` : ''}\r\n <div id=\"multiselect-input-container\" part=\"multiselect-input-container\" class=\"d-flex\">\r\n <input part=\"input\" type=\"text\" id=\"search-input\" name=\"search-input\" class=\"flex-grow\" value=\"\" placeholder=\"Search\"/>\r\n <button id=\"dropdown-button\" part=\"button-icon\" class=\"material-icons\">keyboard_arrow_down</button>\r\n </div>\r\n <div id=\"select-list\" part=\"select-list\" class=\"hide d-flex flex-col flex-wrap justify-center\"></div>\r\n </div>\r\n <div id=\"selected-list\" part=\"selected-list\" class=\"d-flex flex-wrap\"></div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sf-checklist_test.d.ts","sourceRoot":"","sources":["../../src/test/sf-checklist_test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Superflows.dev
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { SfMultiselectSearch } from '../sf-multiselect-search.js';
|
|
7
|
+
// import { stub } from 'sinon';
|
|
8
|
+
// import {fixture, assert} from '@open-wc/testing';
|
|
9
|
+
import { assert } from '@open-wc/testing';
|
|
10
|
+
// import {html} from 'lit/static-html.js';
|
|
11
|
+
//const TIMEOUT = 2000;
|
|
12
|
+
suite('sf-multiselect-search > left menu', () => {
|
|
13
|
+
test('is defined', () => {
|
|
14
|
+
const el = document.createElement('sf-multiselect-search');
|
|
15
|
+
assert.instanceOf(el, SfMultiselectSearch);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=sf-checklist_test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sf-checklist_test.js","sourceRoot":"","sources":["../../src/test/sf-checklist_test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,mBAAmB,EAAC,MAAM,6BAA6B,CAAC;AAChE,gCAAgC;AAChC,oDAAoD;AACpD,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAC;AACxC,2CAA2C;AAE3C,uBAAuB;AACvB,KAAK,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAE9C,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;QACtB,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;QAC3D,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AAGL,CAAC,CAAC,CAAC","sourcesContent":["/**\r\n * @license\r\n * Copyright 2022 Superflows.dev\r\n * SPDX-License-Identifier: MIT\r\n */\r\n\r\nimport {SfMultiselectSearch} from '../sf-multiselect-search.js';\r\n// import { stub } from 'sinon';\r\n// import {fixture, assert} from '@open-wc/testing';\r\nimport {assert} from '@open-wc/testing';\r\n// import {html} from 'lit/static-html.js';\r\n\r\n//const TIMEOUT = 2000;\r\nsuite('sf-multiselect-search > left menu', () => {\r\n\r\n test('is defined', () => {\r\n const el = document.createElement('sf-multiselect-search');\r\n assert.instanceOf(el, SfMultiselectSearch);\r\n });\r\n\r\n\r\n});\r\n\r\n"]}
|
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAQA,iBAAS,gBAAgB,CAAC,GAAG,EAAC,MAAM,EAAE,YAKrC;AAGD,QAAA,MAAM,eAAe;yBAfO,MAAM;;CAiBjC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
package/dist/util.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const validateName = (name) => {
|
|
2
|
+
if ((name + "").length > 2) {
|
|
3
|
+
return true;
|
|
4
|
+
}
|
|
5
|
+
return false;
|
|
6
|
+
};
|
|
7
|
+
function alphabeticalSort(arr) {
|
|
8
|
+
let arrSorted = arr.sort((a, b) => {
|
|
9
|
+
return a.trim().toLowerCase().localeCompare(b.trim().toLowerCase());
|
|
10
|
+
});
|
|
11
|
+
return arrSorted;
|
|
12
|
+
}
|
|
13
|
+
const exportFunctions = {
|
|
14
|
+
validateName, alphabeticalSort
|
|
15
|
+
};
|
|
16
|
+
export default exportFunctions;
|
|
17
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AACA,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;IACpC,IAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QACzB,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAA;AAED,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE;QAC/B,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;IACF,OAAO,SAAS,CAAA;AAClB,CAAC;AAGD,MAAM,eAAe,GAAG;IACrB,YAAY,EAAE,gBAAgB;CAChC,CAAC;AAEF,eAAe,eAAe,CAAC","sourcesContent":["\r\nconst validateName = (name: string) => {\r\n if((name + \"\").length > 2) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction alphabeticalSort(arr:string[]){\r\n let arrSorted = arr.sort((a,b) => {\r\n return a.trim().toLowerCase().localeCompare(b.trim().toLowerCase())\r\n })\r\n return arrSorted\r\n}\r\n\r\n\r\nconst exportFunctions = {\r\n validateName, alphabeticalSort\r\n};\r\n\r\nexport default exportFunctions;"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sf-multiselect-search",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "1.0.1",
|
|
5
|
+
"description": "Superflows Multiselect Component",
|
|
6
|
+
"module": "dist/sf-multiselect-search.js",
|
|
7
|
+
"outDir": "dist",
|
|
8
|
+
"declaration": true,
|
|
9
|
+
"type": "module",
|
|
10
|
+
"main": "dist/sf-multiselect-search.js",
|
|
11
|
+
"types": "dist/sf-multiselect-search.d.ts",
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"build:watch": "tsc --watch",
|
|
19
|
+
"clean": "rimraf sf-multiselect-search.{d.ts,d.ts.map,js,js.map} test/sf-multiselect-search.{d.ts,d.ts.map,js,js.map} test/sf-multiselect-search_test.{d.ts,d.ts.map,js,js.map}",
|
|
20
|
+
"lint": "npm run lint:lit-analyzer && npm run lint:eslint",
|
|
21
|
+
"lint:eslint": "eslint 'src/**/*.ts'",
|
|
22
|
+
"lint:lit-analyzer": "lit-analyzer",
|
|
23
|
+
"format": "prettier \"**/*.{cjs,html,js,json,md,ts}\" --ignore-path ./.eslintignore --write",
|
|
24
|
+
"analyze": "cem analyze --litelement --globs \"src/**/*.ts\"",
|
|
25
|
+
"analyze:watch": "cem analyze --litelement --globs \"src/**/*.ts\" --watch",
|
|
26
|
+
"serve": "wds --watch",
|
|
27
|
+
"serve:prod": "MODE=prod npm run serve",
|
|
28
|
+
"test": "npm run test:dev && npm run test:prod",
|
|
29
|
+
"test:dev": "wtr --verbose=true --coverage --silent=false",
|
|
30
|
+
"test:watch": "wtr --watch",
|
|
31
|
+
"test:prod": "MODE=prod wtr",
|
|
32
|
+
"test:prod:watch": "MODE=prod wtr --watch",
|
|
33
|
+
"checksize": "rollup -c ; cat sf-multiselect-search.bundled.js | gzip -9 | wc -c ; rm sf-multiselect-search.bundled.js"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"superflows",
|
|
37
|
+
"react",
|
|
38
|
+
"serverless",
|
|
39
|
+
"buttons",
|
|
40
|
+
"input",
|
|
41
|
+
"navigation",
|
|
42
|
+
"building blocks",
|
|
43
|
+
"lego",
|
|
44
|
+
"search",
|
|
45
|
+
"notifications",
|
|
46
|
+
"login",
|
|
47
|
+
"sign in",
|
|
48
|
+
"profile",
|
|
49
|
+
"menu",
|
|
50
|
+
"brand",
|
|
51
|
+
"lit",
|
|
52
|
+
"lit-element",
|
|
53
|
+
"navigation-bar",
|
|
54
|
+
"web component",
|
|
55
|
+
"browser"
|
|
56
|
+
],
|
|
57
|
+
"author": "Superflows-dev",
|
|
58
|
+
"license": "MIT",
|
|
59
|
+
"repository": "superflows-dev/sf-multiselect-search",
|
|
60
|
+
"dependencies": {
|
|
61
|
+
"fs": "^0.0.1-security",
|
|
62
|
+
"lit": "^2.2.4",
|
|
63
|
+
"sinon": "^15.0.1"
|
|
64
|
+
},
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"@11ty/eleventy": "^3.1.0",
|
|
67
|
+
"@11ty/eleventy-plugin-syntaxhighlight": "^4.0.0",
|
|
68
|
+
"@custom-elements-manifest/analyzer": "^0.6.3",
|
|
69
|
+
"@open-wc/testing": "^3.1.7",
|
|
70
|
+
"@rollup/plugin-node-resolve": "^13.3.0",
|
|
71
|
+
"@rollup/plugin-replace": "^4.0.0",
|
|
72
|
+
"@types/mocha": "^10.0.10",
|
|
73
|
+
"@typescript-eslint/eslint-plugin": "^5.25.0",
|
|
74
|
+
"@typescript-eslint/parser": "^5.25.0",
|
|
75
|
+
"@web/dev-server": "^0.4.6",
|
|
76
|
+
"@web/dev-server-legacy": "^1.0.0",
|
|
77
|
+
"@web/test-runner": "^0.20.1",
|
|
78
|
+
"@web/test-runner-playwright": "^0.11.0",
|
|
79
|
+
"@webcomponents/webcomponentsjs": "^2.6.0",
|
|
80
|
+
"eslint": "^8.15.0",
|
|
81
|
+
"lit-analyzer": "^2.0.3",
|
|
82
|
+
"prettier": "^2.6.2",
|
|
83
|
+
"rimraf": "^3.0.2",
|
|
84
|
+
"rollup": "^2.73.0",
|
|
85
|
+
"rollup-plugin-summary": "^1.4.3",
|
|
86
|
+
"rollup-plugin-terser": "^7.0.2",
|
|
87
|
+
"typescript": "~4.7.4"
|
|
88
|
+
},
|
|
89
|
+
"customElements": "custom-elements.json",
|
|
90
|
+
"include": [
|
|
91
|
+
"src"
|
|
92
|
+
]
|
|
93
|
+
}
|