intelliwaketssveltekitv25 0.1.168 → 0.1.169

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.
@@ -47,6 +47,8 @@
47
47
  parentDivElement = null,
48
48
  form = undefined,
49
49
  onadd,
50
+ onselect,
51
+ oncreate,
50
52
  onclear,
51
53
  onclearall
52
54
  }: {
@@ -87,6 +89,8 @@
87
89
  parentDivElement?: HTMLDivElement | null
88
90
  form?: string | undefined,
89
91
  onadd?: (item: T) => void,
92
+ onselect?: (item: T) => void,
93
+ oncreate?: (item: string) => void,
90
94
  onclear?: (item: T) => void,
91
95
  onclearall?: () => void
92
96
  } = $props()
@@ -94,7 +98,6 @@
94
98
  let searchValue = $state('')
95
99
  let selectedIndex = $state(0)
96
100
  let elInput = $state<HTMLInputElement | null>(null)
97
- let initialPass = $state(true)
98
101
 
99
102
  let disable = $derived(disabled || readonly)
100
103
 
@@ -103,21 +106,38 @@
103
106
  resizeTS = new Date().valueOf()
104
107
  }
105
108
 
106
- async function doAdd(item: T | null | undefined) {
109
+ function updateSelectedIDs(sels: T[]) {
110
+ if (autoModifySelected && !!selectedIDs) {
111
+ selectedIDs = sels.map(sel => idValue(sel))
112
+ }
113
+ }
114
+
115
+ async function doAdd(item: T | null | undefined, creating: boolean) {
107
116
  if (!disable) {
108
117
  if (item) {
109
- if (autoModifySelected) selected = [...selected, item]
118
+ if (autoModifySelected) {
119
+ selected = [...selected, item]
120
+ updateSelectedIDs(selected)
121
+ }
110
122
  searchValue = ''
111
123
  await tick()
112
124
  if (elInput) elInput.focus()
113
125
  if (onadd) onadd(item)
126
+ if (!creating) {
127
+ if (onselect) onselect(item)
128
+ } else {
129
+ if (oncreate) oncreate(inputValue(item))
130
+ }
114
131
  }
115
132
  }
116
133
  }
117
134
 
118
135
  async function doClear(item: T) {
119
136
  if (!disable) {
120
- if (autoModifySelected) selected = selected.filter(s => !DeepEqual(idValue(s), idValue(item)))
137
+ if (autoModifySelected) {
138
+ selected = selected.filter(s => !DeepEqual(idValue(s), idValue(item)))
139
+ updateSelectedIDs(selected)
140
+ }
121
141
  if (elInput) {
122
142
  await tick()
123
143
  elInput.focus()
@@ -130,7 +150,10 @@
130
150
  e.stopPropagation()
131
151
  if (!disable) {
132
152
  if (allowClearAll) {
133
- if (autoModifySelected) selected = []
153
+ if (autoModifySelected) {
154
+ selected = []
155
+ updateSelectedIDs(selected)
156
+ }
134
157
  await tick()
135
158
  }
136
159
  if (elInput) {
@@ -145,11 +168,11 @@
145
168
  if (!disable) {
146
169
  if (searchValue && create) {
147
170
  if (!createValid) {
148
- doAdd(create(searchValue))
171
+ await doAdd(create(searchValue), true)
149
172
  } else {
150
173
  const valid = createValid(searchValue)
151
174
  if (valid === true) {
152
- doAdd(create(searchValue))
175
+ await doAdd(create(searchValue), true)
153
176
  } else if (typeof valid === 'string') {
154
177
  ShowMessageBox.show(valid)
155
178
  }
@@ -165,16 +188,6 @@
165
188
  item
166
189
  })))
167
190
 
168
- function setSelectedIDs(sels: T[]) {
169
- if (!initialPass && autoModifySelected && selectedIDs && (selectedIDs.length !== sels.length || !sels.every(sel => !!selectedIDs?.some(selID => selID === idValue(sel))))) {
170
- selectedIDs = sels.map(sel => idValue(sel))
171
- }
172
- }
173
-
174
- $effect(() => {
175
- setSelectedIDs(selected)
176
- })
177
-
178
191
  function setSelected(selIDs: (string | number)[] | undefined, poss: T[]) {
179
192
  if (selIDs && autoModifySelected && (selIDs.length !== selected.length || !selected.every(sel => !!selIDs?.some(selID => selID === idValue(sel))))) {
180
193
  selected = poss.filter(po => !!selIDs?.some(selID => selID == idValue(po)))
@@ -193,14 +206,17 @@
193
206
  if (selectedIndex === -1) {
194
207
  doCreate()
195
208
  } else {
196
- doAdd(listItems[selectedIndex]?.item)
209
+ doAdd(listItems[selectedIndex]?.item, false)
197
210
  }
198
211
  e.stopPropagation()
199
212
  e.preventDefault()
200
213
  }
201
214
  break
202
215
  case 'Backspace':
203
- if (!searchValue) selected = selected.slice(0, -1)
216
+ if (!searchValue) {
217
+ selected = selected.slice(0, -1)
218
+ updateSelectedIDs(selected)
219
+ }
204
220
  break
205
221
  case 'ArrowDown':
206
222
  if (!show) {
@@ -257,7 +273,6 @@
257
273
  if (autoFocus && elInput) {
258
274
  elInput.focus()
259
275
  }
260
- initialPass = false
261
276
  }, 200)
262
277
  })
263
278
 
@@ -380,7 +395,7 @@
380
395
  {#each listItems as listItem, idx (keyValue(listItem.item, idx))}
381
396
  <button type='button'
382
397
  class='btnClean w-full px-2 py-1 hover:bg-slate-200 text-left'
383
- onclick={() => doAdd(listItem.item)}
398
+ onclick={() => doAdd(listItem.item, false)}
384
399
  tabindex={-1}
385
400
  class:bg-slate-100={selectedIndex === idx}>
386
401
  <DisplayHTML value={listItem.display?.toString()} />
@@ -39,6 +39,8 @@ declare class __sveltets_Render<T extends TGenericMultiSelect> {
39
39
  parentDivElement?: HTMLDivElement | null;
40
40
  form?: string | undefined;
41
41
  onadd?: ((item: T) => void) | undefined;
42
+ onselect?: ((item: T) => void) | undefined;
43
+ oncreate?: ((item: string) => void) | undefined;
42
44
  onclear?: ((item: T) => void) | undefined;
43
45
  onclearall?: (() => void) | undefined;
44
46
  };
@@ -20,6 +20,7 @@
20
20
  verbose = false,
21
21
  updateQueryParams = false,
22
22
  cookieParms = false,
23
+ cookieDays,
23
24
  invalidate = 'All',
24
25
  class: clazz = ''
25
26
  }: (Pick<IPaginatorResponse, 'page' | 'pageCount'> &
@@ -27,6 +28,7 @@
27
28
  verbose?: boolean
28
29
  updateQueryParams?: boolean | string
29
30
  cookieParms?: boolean | string
31
+ cookieDays?: number
30
32
  invalidate?: string | string[] | (string | URL | ((url: URL) => boolean)) | (string | URL | ((url: URL) => boolean))[] | null
31
33
  class?: string
32
34
  }) = $props()
@@ -140,9 +142,9 @@
140
142
  } else if (display.page !== currentValue) {
141
143
  if (queryParamName) {
142
144
  pageState.url.searchParams.set(queryParamName, display.page.toString())
143
- goto(pageState.url, gotoSettings)
145
+ goto(pageState.url, gotoSettings)
144
146
  } else if (cookieName) {
145
- CookieCreate(cookieName, display.page.toString())
147
+ CookieCreate(cookieName, display.page.toString(), cookieDays)
146
148
  if (invalidate) {
147
149
  performInvalidate()
148
150
  } else {
@@ -3,6 +3,7 @@ type $$ComponentProps = (Pick<IPaginatorResponse, 'page' | 'pageCount'> & {
3
3
  verbose?: boolean;
4
4
  updateQueryParams?: boolean | string;
5
5
  cookieParms?: boolean | string;
6
+ cookieDays?: number;
6
7
  invalidate?: string | string[] | (string | URL | ((url: URL) => boolean)) | (string | URL | ((url: URL) => boolean))[] | null;
7
8
  class?: string;
8
9
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intelliwaketssveltekitv25",
3
- "version": "0.1.168",
3
+ "version": "0.1.169",
4
4
  "exports": {
5
5
  ".": {
6
6
  "types": "./dist/index.d.ts",