@softwareone/spi-sv5-library 1.11.6 → 1.11.7

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.
@@ -52,7 +52,7 @@
52
52
  let isLoading = $state(false);
53
53
 
54
54
  const { form, errors, isFormValid } = getFormContext<Schema>(contextName);
55
- $form = structuredClone($state.snapshot(initialData));
55
+ $form = $state.snapshot(initialData);
56
56
 
57
57
  const onUpdated = () => {
58
58
  isLoading = false;
@@ -4,16 +4,32 @@
4
4
 
5
5
  interface Props {
6
6
  bodyRows: Row<T>[];
7
+ enableChecked?: boolean;
7
8
  }
8
9
 
9
- let { bodyRows }: Props = $props();
10
+ let { bodyRows, enableChecked = false }: Props = $props();
11
+
12
+ const CLICKABLE_TAGS = ['td', 'span', 'p'];
13
+
14
+ const handleRowClick = (row: Row<T>, target: EventTarget | null) => {
15
+ const isHtmlElement = target instanceof HTMLElement;
16
+ const tagName = isHtmlElement ? target.tagName.toLocaleLowerCase() : '';
17
+ if (isHtmlElement && CLICKABLE_TAGS.includes(tagName)) {
18
+ row.toggleSelected();
19
+ }
20
+ };
10
21
  </script>
11
22
 
12
23
  <tbody class="table-body">
13
24
  {#each bodyRows as row (row.id)}
14
25
  <tr
15
26
  animate:flip={{ duration: 500 }}
16
- class={['table-row', row.getIsSelected() && 'table-row--selected']}
27
+ class={[
28
+ 'table-row',
29
+ row.getIsSelected() && 'table-row--selected',
30
+ enableChecked && 'table-row--clickable'
31
+ ]}
32
+ onclick={enableChecked ? (event) => handleRowClick(row, event.target) : undefined}
17
33
  >
18
34
  {#each row.getVisibleCells() as cell}
19
35
  {@const alignColumn = cell.column.columnDef.meta?.alignColumn}
@@ -66,6 +82,10 @@
66
82
  background: var(--color-row-selected);
67
83
  }
68
84
 
85
+ .table-row--clickable {
86
+ cursor: pointer;
87
+ }
88
+
69
89
  .table-cell {
70
90
  max-width: 50px;
71
91
  padding: var(--spacing-md) var(--spacing-lg);
@@ -2,6 +2,7 @@ import { type Row } from './adapter/index.js';
2
2
  declare function $$render<T>(): {
3
3
  props: {
4
4
  bodyRows: Row<T>[];
5
+ enableChecked?: boolean;
5
6
  };
6
7
  exports: {};
7
8
  bindings: "";
@@ -48,7 +48,7 @@
48
48
  pagination?: Pagination;
49
49
  excelSetting?: ExcelSetting;
50
50
  header?: Snippet;
51
- bulkActions?: Snippet<[selectedRows: T[]]>;
51
+ bulkActions?: Snippet<[selectedRows: T[], clearSelection: VoidFunction]>;
52
52
  onpagechange?: (pageSize: number, pageNumber: number) => void;
53
53
  onpagesizechange?: (pageSize: number) => void;
54
54
  }
@@ -206,6 +206,10 @@
206
206
  }
207
207
  }
208
208
 
209
+ const clearSelection = () => {
210
+ rowSelection = {};
211
+ };
212
+
209
213
  const changeFilters = (filters: Filter[]) => {
210
214
  const searchParams = new URLSearchParams(page.url.searchParams);
211
215
  searchParams.delete('filter');
@@ -286,7 +290,10 @@
286
290
  </p>
287
291
  {#if bulkActions}
288
292
  <hr class="action-divider" />
289
- {@render bulkActions?.(selectedRows.map((row) => row.original))}
293
+ {@render bulkActions?.(
294
+ selectedRows.map((row) => row.original),
295
+ clearSelection
296
+ )}
290
297
  {/if}
291
298
  </div>
292
299
  {/if}
@@ -295,7 +302,7 @@
295
302
  <table class="table-main">
296
303
  <Header headerGroups={table.getHeaderGroups()} {enableColumnSearch} />
297
304
  {#if hasData}
298
- <Body bodyRows={table.getRowModel().rows} />
305
+ <Body bodyRows={table.getRowModel().rows} {enableChecked} />
299
306
  {/if}
300
307
  </table>
301
308
  </article>
@@ -18,7 +18,7 @@ declare function $$render<T>(): {
18
18
  pagination?: Pagination;
19
19
  excelSetting?: ExcelSetting;
20
20
  header?: Snippet;
21
- bulkActions?: Snippet<[selectedRows: T[]]>;
21
+ bulkActions?: Snippet<[selectedRows: T[], clearSelection: VoidFunction]>;
22
22
  onpagechange?: (pageSize: number, pageNumber: number) => void;
23
23
  onpagesizechange?: (pageSize: number) => void;
24
24
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softwareone/spi-sv5-library",
3
- "version": "1.11.6",
3
+ "version": "1.11.7",
4
4
  "description": "Svelte components",
5
5
  "keywords": [
6
6
  "svelte",