intelliwaketssveltekitv25 0.1.167 → 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.
package/dist/Cookie.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare function CookieCreate(name: string, value: string | null, days: number): void;
1
+ export declare function CookieCreate(name: string, value: string | null, days?: number): void;
2
2
  export declare function CookieReadOld(name: string, defaultValue?: string | null): string | null;
3
3
  export declare function CookieRead(name: string, defaultValue?: string | null): string | null;
4
4
  export declare function CookieErase(name: string): void;
package/dist/Cookie.js CHANGED
@@ -6,7 +6,7 @@ import { IsOn } from "@solidbasisventures/intelliwaketsfoundation";
6
6
  export function CookieCreate(name, value, days) {
7
7
  name = name.replace(/=/g, '');
8
8
  let expires = '';
9
- if (days) {
9
+ if (days !== undefined) {
10
10
  const date = new Date();
11
11
  date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
12
12
  expires = '; expires=' + date.toUTCString();
@@ -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
  };
@@ -10,21 +10,25 @@
10
10
  ToArray,
11
11
  ToDigits
12
12
  } from '@solidbasisventures/intelliwaketsfoundation'
13
- import { DropDown, type IDDAction, PageAdvanceSize } from './index'
13
+ import { CookieCreate, CookieErase, CookieRead, DropDown, type IDDAction, PageAdvanceSize } from './index'
14
14
  import { page as pageState } from '$app/state'
15
- import { goto } from '$app/navigation'
15
+ import { goto, invalidate as doInvalidate, invalidateAll } from '$app/navigation'
16
16
 
17
17
  let {
18
18
  page = $bindable(),
19
19
  pageCount,
20
20
  verbose = false,
21
21
  updateQueryParams = false,
22
+ cookieParms = false,
23
+ cookieDays,
22
24
  invalidate = 'All',
23
25
  class: clazz = ''
24
26
  }: (Pick<IPaginatorResponse, 'page' | 'pageCount'> &
25
27
  {
26
28
  verbose?: boolean
27
29
  updateQueryParams?: boolean | string
30
+ cookieParms?: boolean | string
31
+ cookieDays?: number
28
32
  invalidate?: string | string[] | (string | URL | ((url: URL) => boolean)) | (string | URL | ((url: URL) => boolean))[] | null
29
33
  class?: string
30
34
  }) = $props()
@@ -95,10 +99,23 @@
95
99
  let display = $derived(createDisplay(page, pageCount, clientWidth))
96
100
 
97
101
  let queryParamName = $derived(!updateQueryParams ? null : updateQueryParams === true ? 'page' : updateQueryParams)
102
+ let cookieName = $derived(!cookieParms ? null : cookieParms === true ? 'page' : cookieParms)
103
+
104
+ function performInvalidate() {
105
+ for (const inv of ToArray(invalidate)) {
106
+ if (inv) {
107
+ if (inv === 'All') {
108
+ invalidateAll()
109
+ } else {
110
+ doInvalidate(inv)
111
+ }
112
+ }
113
+ }
114
+ }
98
115
 
99
116
  $effect(() => {
100
- if (queryParamName) {
101
- const currentValue = CleanNumberNull(pageState.url.searchParams.get(queryParamName))
117
+ if (queryParamName || cookieName) {
118
+ const currentValue = CleanNumberNull(cookieName ? CookieRead(cookieName) : queryParamName ? pageState.url.searchParams.get(queryParamName) : null)
102
119
  const gotoSettings: {
103
120
  replaceState?: boolean | undefined;
104
121
  invalidateAll?: boolean | undefined;
@@ -110,13 +127,33 @@
110
127
  }
111
128
  if (display.page === 1) {
112
129
  if (currentValue) {
113
- pageState.url.searchParams.delete(queryParamName)
114
- goto(pageState.url, gotoSettings)
130
+ if (queryParamName) {
131
+ pageState.url.searchParams.delete(queryParamName)
132
+ goto(pageState.url, gotoSettings)
133
+ } else if (cookieName) {
134
+ CookieErase(cookieName)
135
+ if (invalidate) {
136
+ performInvalidate()
137
+ } else {
138
+ window.location.reload()
139
+ }
140
+ }
115
141
  }
116
142
  } else if (display.page !== currentValue) {
117
- pageState.url.searchParams.set(queryParamName, display.page.toString())
118
- goto(pageState.url, gotoSettings)
143
+ if (queryParamName) {
144
+ pageState.url.searchParams.set(queryParamName, display.page.toString())
145
+ goto(pageState.url, gotoSettings)
146
+ } else if (cookieName) {
147
+ CookieCreate(cookieName, display.page.toString(), cookieDays)
148
+ if (invalidate) {
149
+ performInvalidate()
150
+ } else {
151
+ window.location.reload()
152
+ }
153
+ }
119
154
  }
155
+ } else if (invalidate) {
156
+ performInvalidate()
120
157
  }
121
158
  })
122
159
  </script>
@@ -2,6 +2,8 @@ import { type IPaginatorResponse } from '@solidbasisventures/intelliwaketsfounda
2
2
  type $$ComponentProps = (Pick<IPaginatorResponse, 'page' | 'pageCount'> & {
3
3
  verbose?: boolean;
4
4
  updateQueryParams?: boolean | string;
5
+ cookieParms?: boolean | string;
6
+ cookieDays?: number;
5
7
  invalidate?: string | string[] | (string | URL | ((url: URL) => boolean)) | (string | URL | ((url: URL) => boolean))[] | null;
6
8
  class?: string;
7
9
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intelliwaketssveltekitv25",
3
- "version": "0.1.167",
3
+ "version": "0.1.169",
4
4
  "exports": {
5
5
  ".": {
6
6
  "types": "./dist/index.d.ts",