@lavalogic/scoria 0.18.1 → 0.18.2

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.
@@ -25,7 +25,7 @@
25
25
 
26
26
  const cellTypes: Record<
27
27
  'Number' | 'Date' | 'Select' | 'Checkbox' | 'Query' | 'Text',
28
- Component<any>
28
+ object & Component<any>
29
29
  > = {
30
30
  Number: TableNumberInput,
31
31
  Date: TableDatePicker,
@@ -29,35 +29,9 @@
29
29
  id: columnDef.id,
30
30
  });
31
31
 
32
- const editableAsync = $derived(
33
- cell.column.columnDef.isEditable(cell.row.original, cell.row.originalIndex)
32
+ const editable = $derived(
33
+ await cell.column.columnDef.isEditable(cell.row.original, cell.row.originalIndex)
34
34
  );
35
- let editable = $state(false);
36
-
37
- let asyncCounter = 0;
38
- $effect(() => {
39
- void editableAsync;
40
- const localCounter = (asyncCounter = asyncCounter + 1);
41
- (async () => {
42
- try {
43
- const isEditable = await editableAsync;
44
- if (asyncCounter === localCounter) {
45
- editable = isEditable;
46
- } else if (cell.column.columnDef.debug) {
47
- console.log('skipping async editable because it is stale');
48
- }
49
- } catch (e) {
50
- if (cell.column.columnDef.debug) {
51
- console.error(e);
52
- }
53
- if (asyncCounter === localCounter) {
54
- editable = false;
55
- } else if (cell.column.columnDef.debug) {
56
- console.log('skipping async editable because it is stale');
57
- }
58
- }
59
- })().catch(devCatch);
60
- });
61
35
  const focusDetails: TableFocusDetails<T, never> = $derived(
62
36
  new TableFocusDetails(cell, tableContext)
63
37
  );
@@ -1,17 +1,17 @@
1
1
  import type { TableDatePickerProps } from './TableDatePickerProps.js';
2
- declare function $$render<T extends object>(): {
2
+ declare function $$render<T extends object>(): Promise<{
3
3
  props: TableDatePickerProps<T>;
4
4
  exports: {};
5
5
  bindings: "";
6
6
  slots: {};
7
7
  events: {};
8
- };
8
+ }>;
9
9
  declare class __sveltets_Render<T extends object> {
10
- props(): ReturnType<typeof $$render<T>>['props'];
11
- events(): ReturnType<typeof $$render<T>>['events'];
12
- slots(): ReturnType<typeof $$render<T>>['slots'];
10
+ props(): Awaited<ReturnType<typeof $$render<T>>>['props'];
11
+ events(): Awaited<ReturnType<typeof $$render<T>>>['events'];
12
+ slots(): Awaited<ReturnType<typeof $$render<T>>>['slots'];
13
13
  bindings(): "";
14
- exports(): {};
14
+ exports(): Promise<{}>;
15
15
  }
16
16
  interface $$IsomorphicComponent {
17
17
  new <T extends object>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
@@ -54,34 +54,9 @@
54
54
 
55
55
  const tableContext = getContext<TableContext<T, never>>(TableContext.identifier);
56
56
 
57
- const editableAsync = $derived(
58
- cell.column.columnDef.isEditable(cell.row.original, cell.row.originalIndex)
57
+ const editable = $derived(
58
+ await cell.column.columnDef.isEditable(cell.row.original, cell.row.originalIndex)
59
59
  );
60
- let editable = $state(false);
61
- let asyncCounter = 0;
62
- $effect(() => {
63
- void editableAsync;
64
- const localCounter = (asyncCounter = asyncCounter + 1);
65
- (async () => {
66
- try {
67
- const isEditable = await editableAsync;
68
- if (asyncCounter === localCounter) {
69
- editable = isEditable;
70
- } else if (cell.column.columnDef.debug) {
71
- console.log('skipping async editable because it is stale');
72
- }
73
- } catch (e) {
74
- if (cell.column.columnDef.debug) {
75
- console.error(e);
76
- }
77
- if (asyncCounter === localCounter) {
78
- editable = false;
79
- } else if (cell.column.columnDef.debug) {
80
- console.log('skipping async editable because it is stale');
81
- }
82
- }
83
- })().catch(devCatch);
84
- });
85
60
 
86
61
  const focusDetails: TableFocusDetails<T, never> = $derived(
87
62
  new TableFocusDetails(cell, tableContext)
@@ -2,19 +2,19 @@ export interface TableNumberInputProps<T extends object> {
2
2
  cell: TableCell<T>;
3
3
  }
4
4
  import type { TableCell } from '../../../Types/Columns/TableCell.js';
5
- declare function $$render<T extends object>(): {
5
+ declare function $$render<T extends object>(): Promise<{
6
6
  props: TableNumberInputProps<T>;
7
7
  exports: {};
8
8
  bindings: "";
9
9
  slots: {};
10
10
  events: {};
11
- };
11
+ }>;
12
12
  declare class __sveltets_Render<T extends object> {
13
- props(): ReturnType<typeof $$render<T>>['props'];
14
- events(): ReturnType<typeof $$render<T>>['events'];
15
- slots(): ReturnType<typeof $$render<T>>['slots'];
13
+ props(): Awaited<ReturnType<typeof $$render<T>>>['props'];
14
+ events(): Awaited<ReturnType<typeof $$render<T>>>['events'];
15
+ slots(): Awaited<ReturnType<typeof $$render<T>>>['slots'];
16
16
  bindings(): "";
17
- exports(): {};
17
+ exports(): Promise<{}>;
18
18
  }
19
19
  interface $$IsomorphicComponent {
20
20
  new <T extends object>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
@@ -4,7 +4,6 @@
4
4
  lang="ts"
5
5
  generics="T extends object,"
6
6
  >
7
- import { dev } from '$app/environment';
8
7
  import QuerySelect from '../../../../QuerySelect.svelte';
9
8
  import type { QueryDef } from '../../../Types/Columns/Definitions/Accessors/QueryDef.svelte.js';
10
9
  import { TableContext } from '../../../Types/Context/TableContext.svelte.js';
@@ -32,10 +31,9 @@
32
31
 
33
32
  const tableContext = getContext<TableContext<T, never>>(TableContext.identifier);
34
33
 
35
- const editableAsync = $derived(
36
- cell.column.columnDef.isEditable(cell.row.original, cell.row.originalIndex)
34
+ const editable = $derived(
35
+ await cell.column.columnDef.isEditable(cell.row.original, cell.row.originalIndex)
37
36
  );
38
- let editable = $state(false);
39
37
 
40
38
  let valueAsyncCounter = 0;
41
39
  $effect(() => {
@@ -76,33 +74,6 @@
76
74
  });
77
75
  });
78
76
 
79
- let editableAsyncCounter = 0;
80
- $effect(() => {
81
- void editableAsync;
82
- untrack(() => {
83
- const localCounter = (editableAsyncCounter = editableAsyncCounter + 1);
84
- (async () => {
85
- try {
86
- const isEditable = await editableAsync;
87
- if (editableAsyncCounter === localCounter) {
88
- editable = isEditable;
89
- } else if (dev || columnDef.debug) {
90
- console.log('skipping async editable because it is stale');
91
- }
92
- } catch (e) {
93
- if (dev || columnDef.debug) {
94
- console.error(e);
95
- }
96
- if (editableAsyncCounter === localCounter) {
97
- editable = false;
98
- } else if (dev || columnDef.debug) {
99
- console.log('skipping async editable because it is stale');
100
- }
101
- }
102
- })().catch(devCatch);
103
- });
104
- });
105
-
106
77
  const focusDetails: TableFocusDetails<T, never> = $derived(
107
78
  new TableFocusDetails(cell, tableContext)
108
79
  );
@@ -1,17 +1,17 @@
1
1
  import type { TableQuerySelectProps } from './TableQuerySelectProps.js';
2
- declare function $$render<T extends object>(): {
2
+ declare function $$render<T extends object>(): Promise<{
3
3
  props: TableQuerySelectProps<T, unknown>;
4
4
  exports: {};
5
5
  bindings: "";
6
6
  slots: {};
7
7
  events: {};
8
- };
8
+ }>;
9
9
  declare class __sveltets_Render<T extends object> {
10
- props(): ReturnType<typeof $$render<T>>['props'];
11
- events(): ReturnType<typeof $$render<T>>['events'];
12
- slots(): ReturnType<typeof $$render<T>>['slots'];
10
+ props(): Awaited<ReturnType<typeof $$render<T>>>['props'];
11
+ events(): Awaited<ReturnType<typeof $$render<T>>>['events'];
12
+ slots(): Awaited<ReturnType<typeof $$render<T>>>['slots'];
13
13
  bindings(): "";
14
- exports(): {};
14
+ exports(): Promise<{}>;
15
15
  }
16
16
  interface $$IsomorphicComponent {
17
17
  new <T extends object>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
@@ -32,34 +32,10 @@
32
32
  const optional = $derived(cell.column.columnDef.optional);
33
33
 
34
34
  const tableContext = getContext<TableContext<T, never>>(TableContext.identifier);
35
- const editableAsync = $derived(
36
- cell.column.columnDef.isEditable(cell.row.original, cell.row.originalIndex)
35
+
36
+ const editable = $derived(
37
+ await cell.column.columnDef.isEditable(cell.row.original, cell.row.originalIndex)
37
38
  );
38
- let editable = $state(false);
39
- let asyncCounter = 0;
40
- $effect(() => {
41
- void editableAsync;
42
- const localCounter = (asyncCounter = asyncCounter + 1);
43
- (async () => {
44
- try {
45
- const isEditable = await editableAsync;
46
- if (asyncCounter === localCounter) {
47
- editable = isEditable;
48
- } else if (cell.column.columnDef.debug) {
49
- console.log('skipping async editable because it is stale');
50
- }
51
- } catch (e) {
52
- if (cell.column.columnDef.debug) {
53
- console.error(e);
54
- }
55
- if (asyncCounter === localCounter) {
56
- editable = false;
57
- } else if (cell.column.columnDef.debug) {
58
- console.log('skipping async editable because it is stale');
59
- }
60
- }
61
- })().catch(devCatch);
62
- });
63
39
 
64
40
  const focusDetails: TableFocusDetails<T, never> = $derived(
65
41
  new TableFocusDetails(cell, tableContext)
@@ -1,17 +1,17 @@
1
1
  import type { TableSelectProps } from './TableSelectProps.js';
2
- declare function $$render<T extends object>(): {
2
+ declare function $$render<T extends object>(): Promise<{
3
3
  props: TableSelectProps<T, T>;
4
4
  exports: {};
5
5
  bindings: "";
6
6
  slots: {};
7
7
  events: {};
8
- };
8
+ }>;
9
9
  declare class __sveltets_Render<T extends object> {
10
- props(): ReturnType<typeof $$render<T>>['props'];
11
- events(): ReturnType<typeof $$render<T>>['events'];
12
- slots(): ReturnType<typeof $$render<T>>['slots'];
10
+ props(): Awaited<ReturnType<typeof $$render<T>>>['props'];
11
+ events(): Awaited<ReturnType<typeof $$render<T>>>['events'];
12
+ slots(): Awaited<ReturnType<typeof $$render<T>>>['slots'];
13
13
  bindings(): "";
14
- exports(): {};
14
+ exports(): Promise<{}>;
15
15
  }
16
16
  interface $$IsomorphicComponent {
17
17
  new <T extends object>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
@@ -21,35 +21,9 @@
21
21
  // getNumberColumnDefOrError(cell.column.columnDef)
22
22
  // );
23
23
 
24
- const editableAsync = $derived(
24
+ const isEditable = $derived(
25
25
  cell.column.columnDef.isEditable(cell.row.original, cell.row.originalIndex)
26
26
  );
27
- let editable = $state(false);
28
-
29
- let asyncCounter = 0;
30
- $effect(() => {
31
- void editableAsync;
32
- const localCounter = (asyncCounter = asyncCounter + 1);
33
- (async () => {
34
- try {
35
- const isEditable = await editableAsync;
36
- if (asyncCounter === localCounter) {
37
- editable = isEditable;
38
- } else if (cell.column.columnDef.debug) {
39
- console.log('skipping async editable because it is stale');
40
- }
41
- } catch (e) {
42
- if (cell.column.columnDef.debug) {
43
- console.error(e);
44
- }
45
- if (asyncCounter === localCounter) {
46
- editable = false;
47
- } else if (cell.column.columnDef.debug) {
48
- console.log('skipping async editable because it is stale');
49
- }
50
- }
51
- })().catch(devCatch);
52
- });
53
27
 
54
28
  const value = $derived(cell.getValue());
55
29
 
@@ -77,7 +51,7 @@
77
51
 
78
52
  $effect(() => {
79
53
  if (wantsToBeEdited) {
80
- if (editable) {
54
+ if (isEditableText) {
81
55
  tick()
82
56
  .then(() => {
83
57
  if (typeof value == 'object' && value instanceof Promise) {
@@ -218,7 +192,7 @@
218
192
  if (
219
193
  tableContext.focusStart?.column === focusDetails.coordinates.column &&
220
194
  tableContext.focusStart.row === focusDetails.coordinates.row &&
221
- editable
195
+ isEditableText
222
196
  ) {
223
197
  if (
224
198
  tableContext.focusEnd?.column !== focusDetails.coordinates.column ||
@@ -285,6 +259,8 @@
285
259
 
286
260
  return unsubscriber;
287
261
  });
262
+
263
+ const isEditableText = $derived(await isEditable);
288
264
  </script>
289
265
 
290
266
  {#if isBeingEdited}
@@ -331,7 +307,7 @@
331
307
  }}
332
308
  bind:this={tdref}
333
309
  tabIndex="0"
334
- class:editable
310
+ class:isEditableText
335
311
  class="focusable"
336
312
  class:multifocus={focusDetails.isMultiFocused}
337
313
  class:multifocus-start={focusDetails.isMultiFocusStart}
@@ -1,17 +1,17 @@
1
1
  import type { TableTextInputProps } from './TableTextInputProps.js';
2
- declare function $$render<T extends object, FilterValueType>(): {
2
+ declare function $$render<T extends object, FilterValueType>(): Promise<{
3
3
  props: TableTextInputProps<T, FilterValueType>;
4
4
  exports: {};
5
5
  bindings: "";
6
6
  slots: {};
7
7
  events: {};
8
- };
8
+ }>;
9
9
  declare class __sveltets_Render<T extends object, FilterValueType> {
10
- props(): ReturnType<typeof $$render<T, FilterValueType>>['props'];
11
- events(): ReturnType<typeof $$render<T, FilterValueType>>['events'];
12
- slots(): ReturnType<typeof $$render<T, FilterValueType>>['slots'];
10
+ props(): Awaited<ReturnType<typeof $$render<T, FilterValueType>>>['props'];
11
+ events(): Awaited<ReturnType<typeof $$render<T, FilterValueType>>>['events'];
12
+ slots(): Awaited<ReturnType<typeof $$render<T, FilterValueType>>>['slots'];
13
13
  bindings(): "";
14
- exports(): {};
14
+ exports(): Promise<{}>;
15
15
  }
16
16
  interface $$IsomorphicComponent {
17
17
  new <T extends object, FilterValueType>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, FilterValueType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, FilterValueType>['props']>, ReturnType<__sveltets_Render<T, FilterValueType>['events']>, ReturnType<__sveltets_Render<T, FilterValueType>['slots']>> & {
@@ -79,7 +79,7 @@ export function generateExampleItemColumnDefs(modal) {
79
79
  getDisplayValue: (item) => {
80
80
  return item.simulatedQuery?.value ?? null;
81
81
  },
82
- isEditable: () => true,
82
+ isEditable: () => Promise.resolve(true),
83
83
  id: 'simulatedQuery',
84
84
  query: async (_v, item) => {
85
85
  void item.someDate;
@@ -98,13 +98,13 @@ export function generateExampleItemColumnDefs(modal) {
98
98
  new TextInputDef({
99
99
  header: 'Name',
100
100
  id: 'name',
101
- isEditable: () => true,
101
+ isEditable: () => Promise.resolve(true),
102
102
  isValid,
103
103
  }),
104
104
  new NumberInputDef({
105
105
  header: 'Some Number',
106
106
  id: 'someNumber',
107
- isEditable: () => true,
107
+ isEditable: () => Promise.resolve(true),
108
108
  min: 0,
109
109
  max: 12345,
110
110
  isValid,
@@ -147,20 +147,20 @@ export function generateExampleItemColumnDefs(modal) {
147
147
  new DateInputDef({
148
148
  header: 'Some Date With Time',
149
149
  id: 'someDateWithTime',
150
- isEditable: () => true,
150
+ isEditable: () => Promise.resolve(true),
151
151
  showTime: true,
152
152
  isValid,
153
153
  }),
154
154
  new DateInputDef({
155
155
  header: 'Flo Date',
156
156
  id: 'floDate',
157
- isEditable: () => true,
157
+ isEditable: () => Promise.resolve(true),
158
158
  defaultHidden: true,
159
159
  }),
160
160
  new DateInputDef({
161
161
  header: 'Flo Date With Time',
162
162
  id: 'floDateWithTime',
163
- isEditable: () => true,
163
+ isEditable: () => Promise.resolve(true),
164
164
  defaultHidden: true,
165
165
  showTime: true,
166
166
  isValid,
@@ -191,7 +191,7 @@ export function generateExampleItemColumnDefs(modal) {
191
191
  ];
192
192
  },
193
193
  getDisplayValue: (item) => item.someSelect,
194
- isEditable: () => true,
194
+ isEditable: () => Promise.resolve(true),
195
195
  isValid,
196
196
  }),
197
197
  new BubbleDef({
@@ -16,7 +16,7 @@ export interface ColumnDefProps<T extends object, in FilterFnType, out OptionsTy
16
16
  defaultHidden?: boolean;
17
17
  minSize?: Pixels;
18
18
  width?: Pixels;
19
- isEditable?: (item: T, index: number) => boolean | Promise<boolean>;
19
+ isEditable?: (item: T, index: number) => Promise<boolean>;
20
20
  resizable?: boolean;
21
21
  isValid?: ValidationFn<T>;
22
22
  filterFn?: FilterFn<T, FilterFnType>;
@@ -56,7 +56,7 @@ export declare abstract class ColumnDef<T extends object, in FilterFnType = neve
56
56
  set filterValueType(v: FilterValueType | undefined);
57
57
  readonly getDisplayValue: ((item: T, index: number) => string | null | Promise<string | null>) | undefined;
58
58
  toJSON(): object;
59
- readonly isEditable: (item: T, index: number) => boolean | Promise<boolean>;
59
+ readonly isEditable: (item: T, index: number) => Promise<boolean>;
60
60
  readonly resizable: boolean;
61
61
  readonly header: string | Snippet;
62
62
  readonly getOptions?: () => Array<SelectOption<OptionsType>> | Promise<Array<SelectOption<OptionsType>>>;
@@ -10,7 +10,7 @@ export class ColumnDef {
10
10
  this.accessorFn = $derived(props.accessorFn);
11
11
  this._minSize = $state(props.minSize ?? 48);
12
12
  this._width = $state(props.width ?? props.minSize ?? 48);
13
- this.isEditable = $derived(props.isEditable ?? (() => false));
13
+ this.isEditable = $derived(props.isEditable ?? (() => Promise.resolve(false)));
14
14
  this.resizable = $derived(props.resizable ?? true);
15
15
  this.header = $derived(props.header);
16
16
  this._filterValueType = $derived(props.filterValueType);
@@ -244,7 +244,7 @@ export async function asyncFilter(array, asyncCallback) {
244
244
  }
245
245
  export function devCatch(e) {
246
246
  if (dev) {
247
- console.log($state.snapshot(e));
247
+ console.log(getErrorMessage(e));
248
248
  }
249
249
  }
250
250
  export function hasQuery(customFilter) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lavalogic/scoria",
3
3
  "description": "Svelte components used for the FloWMS Web Frontend",
4
- "version": "0.18.1",
4
+ "version": "0.18.2",
5
5
  "publishConfig": {
6
6
  "access": "restricted"
7
7
  },