firstly 0.2.1 → 0.4.0

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.
Files changed (210) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/esm/SqlDatabase/FF_LogToConsole.js +9 -14
  3. package/esm/carbone/CarboneController.js +2 -1
  4. package/esm/changeLog/index.d.ts +0 -10
  5. package/esm/{internals → core}/BaseEnum.d.ts +1 -1
  6. package/esm/core/FF_Entity.js +5 -0
  7. package/esm/core/helper.d.ts +2 -0
  8. package/esm/core/helper.js +3 -0
  9. package/esm/core/index.d.ts +0 -0
  10. package/esm/core/index.js +5 -0
  11. package/esm/core/tailwind.d.ts +21 -0
  12. package/esm/core/tailwind.js +22 -0
  13. package/esm/core/tryCatch.d.ts +44 -0
  14. package/esm/core/tryCatch.js +34 -0
  15. package/esm/cron/server/index.js +1 -1
  16. package/esm/feedback/FeedbackController.js +3 -2
  17. package/esm/feedback/index.d.ts +7 -2
  18. package/esm/feedback/index.js +1 -2
  19. package/esm/feedback/server/index.d.ts +0 -5
  20. package/esm/feedback/server/index.js +1 -1
  21. package/esm/formats/strings.js +2 -2
  22. package/esm/index.d.ts +16 -0
  23. package/esm/index.js +13 -0
  24. package/esm/svelte/FF_Repo.svelte.d.ts +9 -2
  25. package/esm/svelte/FF_Repo.svelte.js +40 -17
  26. package/esm/svelte/class/SP.svelte.js +14 -2
  27. package/esm/svelte/helpers/debounce.js +1 -1
  28. package/esm/svelte/index.d.ts +2 -24
  29. package/esm/svelte/index.js +2 -22
  30. package/esm/{ui → svelte/ui}/Icon.svelte +1 -1
  31. package/esm/virtual/StateDemoEnum.d.ts +3 -3
  32. package/esm/virtual/StateDemoEnum.js +3 -3
  33. package/esm/virtual/UIEntity.js +1 -2
  34. package/package.json +8 -39
  35. package/esm/auth/AuthController.d.ts +0 -58
  36. package/esm/auth/AuthController.js +0 -114
  37. package/esm/auth/Entities.d.ts +0 -47
  38. package/esm/auth/Entities.js +0 -182
  39. package/esm/auth/README.md +0 -3
  40. package/esm/auth/index.d.ts +0 -5
  41. package/esm/auth/index.js +0 -5
  42. package/esm/auth/server/AuthController.server.d.ts +0 -58
  43. package/esm/auth/server/AuthController.server.js +0 -518
  44. package/esm/auth/server/handleAuth.d.ts +0 -4
  45. package/esm/auth/server/handleAuth.js +0 -142
  46. package/esm/auth/server/handleGuard.d.ts +0 -22
  47. package/esm/auth/server/handleGuard.js +0 -34
  48. package/esm/auth/server/helperDb.d.ts +0 -10
  49. package/esm/auth/server/helperDb.js +0 -56
  50. package/esm/auth/server/helperFirstly.d.ts +0 -1
  51. package/esm/auth/server/helperFirstly.js +0 -9
  52. package/esm/auth/server/helperOslo.d.ts +0 -7
  53. package/esm/auth/server/helperOslo.js +0 -24
  54. package/esm/auth/server/helperRemultServer.d.ts +0 -5
  55. package/esm/auth/server/helperRemultServer.js +0 -44
  56. package/esm/auth/server/helperRole.d.ts +0 -19
  57. package/esm/auth/server/helperRole.js +0 -57
  58. package/esm/auth/server/index.d.ts +0 -8
  59. package/esm/auth/server/index.js +0 -8
  60. package/esm/auth/server/module.d.ts +0 -300
  61. package/esm/auth/server/module.js +0 -230
  62. package/esm/auth/server/providers/github.d.ts +0 -33
  63. package/esm/auth/server/providers/github.js +0 -87
  64. package/esm/auth/server/providers/helperProvider.d.ts +0 -1
  65. package/esm/auth/server/providers/helperProvider.js +0 -25
  66. package/esm/auth/static/assets/Page-BHW08QWz.css +0 -1
  67. package/esm/auth/static/assets/Page-BRNWcY5Z.d.ts +0 -2
  68. package/esm/auth/static/assets/Page-BRNWcY5Z.js +0 -1
  69. package/esm/auth/static/assets/Page-CFcEsGK8.d.ts +0 -2
  70. package/esm/auth/static/assets/Page-CFcEsGK8.js +0 -7
  71. package/esm/auth/static/assets/Page-tLVs5slF.d.ts +0 -2
  72. package/esm/auth/static/assets/Page-tLVs5slF.js +0 -1
  73. package/esm/auth/static/assets/index-D38rqu4x.d.ts +0 -201
  74. package/esm/auth/static/assets/index-D38rqu4x.js +0 -2
  75. package/esm/auth/static/assets/index-DKWpA6v7.css +0 -4
  76. package/esm/auth/static/favicon.svg +0 -79
  77. package/esm/auth/static/index.html +0 -13
  78. package/esm/auth/types.d.ts +0 -73
  79. package/esm/bin/cmd.d.ts +0 -1
  80. package/esm/bin/cmd.js +0 -793
  81. package/esm/feedback/ui/DialogIssue.svelte +0 -149
  82. package/esm/feedback/ui/DialogIssue.svelte.d.ts +0 -22
  83. package/esm/feedback/ui/DialogIssues.svelte +0 -114
  84. package/esm/feedback/ui/DialogIssues.svelte.d.ts +0 -22
  85. package/esm/feedback/ui/DialogMilestones.svelte +0 -43
  86. package/esm/feedback/ui/DialogMilestones.svelte.d.ts +0 -20
  87. package/esm/feedback/ui/Feedback.svelte +0 -16
  88. package/esm/feedback/ui/Feedback.svelte.d.ts +0 -18
  89. package/esm/internals/FF_Entity.d.ts +0 -2
  90. package/esm/internals/FF_Entity.js +0 -21
  91. package/esm/internals/FF_Fields.d.ts +0 -11
  92. package/esm/internals/FF_Fields.js +0 -144
  93. package/esm/internals/cellsBuildor.d.ts +0 -47
  94. package/esm/internals/cellsBuildor.js +0 -140
  95. package/esm/internals/helper.d.ts +0 -49
  96. package/esm/internals/helper.js +0 -162
  97. package/esm/internals/index.d.ts +0 -82
  98. package/esm/internals/index.js +0 -45
  99. package/esm/internals/storeItem.d.ts +0 -28
  100. package/esm/internals/storeItem.js +0 -176
  101. package/esm/internals/storeList.d.ts +0 -34
  102. package/esm/internals/storeList.js +0 -108
  103. package/esm/internals/theme.d.ts +0 -4
  104. package/esm/internals/theme.js +0 -4
  105. package/esm/server/index.d.ts +0 -52
  106. package/esm/server/index.js +0 -87
  107. package/esm/svelte/FF_Cell.svelte +0 -103
  108. package/esm/svelte/FF_Cell.svelte.d.ts +0 -33
  109. package/esm/svelte/FF_Cell_Caption.svelte +0 -20
  110. package/esm/svelte/FF_Cell_Caption.svelte.d.ts +0 -31
  111. package/esm/svelte/FF_Cell_Display.svelte +0 -61
  112. package/esm/svelte/FF_Cell_Display.svelte.d.ts +0 -29
  113. package/esm/svelte/FF_Cell_Edit.svelte +0 -104
  114. package/esm/svelte/FF_Cell_Edit.svelte.d.ts +0 -32
  115. package/esm/svelte/FF_Cell_Error.svelte +0 -20
  116. package/esm/svelte/FF_Cell_Error.svelte.d.ts +0 -31
  117. package/esm/svelte/FF_Cell_Hint.svelte +0 -20
  118. package/esm/svelte/FF_Cell_Hint.svelte.d.ts +0 -31
  119. package/esm/svelte/FF_Config.svelte +0 -29
  120. package/esm/svelte/FF_Config.svelte.d.ts +0 -9
  121. package/esm/svelte/FF_Form.svelte +0 -155
  122. package/esm/svelte/FF_Form.svelte.d.ts +0 -37
  123. package/esm/svelte/FF_Grid.svelte +0 -257
  124. package/esm/svelte/FF_Grid.svelte.d.ts +0 -37
  125. package/esm/svelte/FF_Layout.svelte +0 -62
  126. package/esm/svelte/FF_Layout.svelte.d.ts +0 -31
  127. package/esm/svelte/actions/intersection.d.ts +0 -6
  128. package/esm/svelte/actions/intersection.js +0 -17
  129. package/esm/svelte/customField.d.ts +0 -69
  130. package/esm/svelte/customField.js +0 -4
  131. package/esm/svelte/dialog/DialogManagement.svelte +0 -98
  132. package/esm/svelte/dialog/DialogManagement.svelte.d.ts +0 -18
  133. package/esm/svelte/dialog/DialogPrimitive.svelte +0 -156
  134. package/esm/svelte/dialog/DialogPrimitive.svelte.d.ts +0 -38
  135. package/esm/svelte/dialog/dialog.d.ts +0 -58
  136. package/esm/svelte/dialog/dialog.js +0 -130
  137. package/esm/svelte/ff_Config.svelte.d.ts +0 -91
  138. package/esm/svelte/ff_Config.svelte.js +0 -111
  139. package/esm/svelte/firstly.css +0 -14
  140. package/esm/svelte/helpers.d.ts +0 -30
  141. package/esm/svelte/helpers.js +0 -38
  142. package/esm/svelte/tryCatch.d.ts +0 -12
  143. package/esm/svelte/tryCatch.js +0 -18
  144. package/esm/sveltekit/server/index.d.ts +0 -5
  145. package/esm/sveltekit/server/index.js +0 -24
  146. package/esm/ui/Button.svelte +0 -138
  147. package/esm/ui/Button.svelte.d.ts +0 -13
  148. package/esm/ui/Clipboardable.svelte +0 -25
  149. package/esm/ui/Clipboardable.svelte.d.ts +0 -12
  150. package/esm/ui/Field.svelte +0 -382
  151. package/esm/ui/Field.svelte.d.ts +0 -40
  152. package/esm/ui/FieldGroup.svelte +0 -117
  153. package/esm/ui/FieldGroup.svelte.d.ts +0 -44
  154. package/esm/ui/Grid.svelte +0 -265
  155. package/esm/ui/Grid.svelte.d.ts +0 -57
  156. package/esm/ui/Grid2.svelte +0 -293
  157. package/esm/ui/Grid2.svelte.d.ts +0 -57
  158. package/esm/ui/GridLoading.svelte +0 -58
  159. package/esm/ui/GridLoading.svelte.d.ts +0 -23
  160. package/esm/ui/GridPaginate.svelte +0 -69
  161. package/esm/ui/GridPaginate.svelte.d.ts +0 -23
  162. package/esm/ui/GridPaginate2.svelte +0 -25
  163. package/esm/ui/GridPaginate2.svelte.d.ts +0 -7
  164. package/esm/ui/Loading.svelte +0 -16
  165. package/esm/ui/Loading.svelte.d.ts +0 -31
  166. package/esm/ui/Tooltip.svelte +0 -45
  167. package/esm/ui/Tooltip.svelte.d.ts +0 -32
  168. package/esm/ui/dialog/DialogForm.svelte +0 -76
  169. package/esm/ui/dialog/DialogForm.svelte.d.ts +0 -21
  170. package/esm/ui/dialog/DialogManagement.svelte +0 -96
  171. package/esm/ui/dialog/DialogManagement.svelte.d.ts +0 -26
  172. package/esm/ui/dialog/DialogPrimitive.svelte +0 -90
  173. package/esm/ui/dialog/DialogPrimitive.svelte.d.ts +0 -38
  174. package/esm/ui/dialog/FormEditAction.svelte +0 -62
  175. package/esm/ui/dialog/FormEditAction.svelte.d.ts +0 -31
  176. package/esm/ui/dialog/dialog.d.ts +0 -60
  177. package/esm/ui/dialog/dialog.js +0 -100
  178. package/esm/ui/index.d.ts +0 -6
  179. package/esm/ui/index.js +0 -20
  180. package/esm/ui/internals/FieldContainer.svelte +0 -39
  181. package/esm/ui/internals/FieldContainer.svelte.d.ts +0 -18
  182. package/esm/ui/internals/Input.svelte +0 -143
  183. package/esm/ui/internals/Input.svelte.d.ts +0 -37
  184. package/esm/ui/internals/Textarea.svelte +0 -66
  185. package/esm/ui/internals/Textarea.svelte.d.ts +0 -33
  186. package/esm/ui/internals/select/MultiSelectMelt.svelte +0 -260
  187. package/esm/ui/internals/select/MultiSelectMelt.svelte.d.ts +0 -32
  188. package/esm/ui/internals/select/Select2.svelte +0 -88
  189. package/esm/ui/internals/select/Select2.svelte.d.ts +0 -12
  190. package/esm/ui/internals/select/SelectMelt.svelte +0 -280
  191. package/esm/ui/internals/select/SelectMelt.svelte.d.ts +0 -40
  192. package/esm/ui/internals/select/SelectRadio.svelte +0 -43
  193. package/esm/ui/internals/select/SelectRadio.svelte.d.ts +0 -27
  194. package/esm/ui/link/Link.svelte +0 -33
  195. package/esm/ui/link/Link.svelte.d.ts +0 -33
  196. package/esm/ui/link/LinkPlus.svelte +0 -63
  197. package/esm/ui/link/LinkPlus.svelte.d.ts +0 -9
  198. package/esm/utils/tailwind.d.ts +0 -2
  199. package/esm/utils/tailwind.js +0 -3
  200. package/esm/utils/transition.d.ts +0 -9
  201. package/esm/utils/transition.js +0 -33
  202. package/esm/utils/types.js +0 -1
  203. /package/esm/{internals → core}/BaseEnum.js +0 -0
  204. /package/esm/{internals → core}/common.d.ts +0 -0
  205. /package/esm/{internals → core}/common.js +0 -0
  206. /package/esm/{utils → core}/types.d.ts +0 -0
  207. /package/esm/{auth → core}/types.js +0 -0
  208. /package/esm/{ui → svelte/ui}/Icon.svelte.d.ts +0 -0
  209. /package/esm/{ui → svelte/ui}/LibIcon.d.ts +0 -0
  210. /package/esm/{ui → svelte/ui}/LibIcon.js +0 -0
@@ -1,265 +0,0 @@
1
- <script lang="ts" generics="T extends Record<any, any>">
2
- import { createEventDispatcher } from 'svelte'
3
-
4
- import type { EntityOrderBy } from 'remult'
5
-
6
- import type { Cell } from '../internals/cellsBuildor.js'
7
- import {
8
- displayWithDefaultAndSuffix,
9
- getEntityDisplayValue,
10
- getEntityDisplayValueFromField,
11
- getFieldLinkDisplayValue,
12
- getFieldMetaType,
13
- } from '../internals/helper.js'
14
- import { LibIcon_Delete, LibIcon_Edit, type StoreList } from '../internals/index.js'
15
- import Button from './Button.svelte'
16
- import Clipboardable from './Clipboardable.svelte'
17
- import GridLoading from './GridLoading.svelte'
18
- import Icon from './Icon.svelte'
19
- import { align, baseTable, getAligns } from './index.js'
20
- import {
21
- LibIcon_Add,
22
- LibIcon_Settings,
23
- LibIcon_Sort,
24
- LibIcon_SortAsc,
25
- LibIcon_SortDesc,
26
- } from './LibIcon.js'
27
- import LinkPlus from './link/LinkPlus.svelte'
28
-
29
- export let cells: Cell<T>[]
30
- export let store: StoreList<T>
31
-
32
- export let withAdd = false
33
- export let withEdit = false
34
- export let withDelete = false
35
-
36
- export let loadingRows = 5
37
-
38
- export let classes = {
39
- // table: 'table-pin-rows table-pin-cols',
40
- table: '',
41
- }
42
- export let orderBy: EntityOrderBy<T> | undefined = undefined
43
- export let orderByCols: (keyof T)[] | true | undefined = undefined
44
-
45
- export let dicoNoResult = 'Aucun résultat !'
46
-
47
- const dispatch = createEventDispatcher()
48
-
49
- const sorting = (toSort: boolean, b: Cell<T>) => {
50
- if (!toSort) {
51
- return
52
- }
53
- if (orderBy === undefined) {
54
- // @ts-ignore
55
- orderBy = { [b.field.key]: 'asc' }
56
- // @ts-ignore
57
- } else if (orderBy[b.field.key] === 'asc') {
58
- // @ts-ignore
59
- orderBy = { [b.field.key]: 'desc' }
60
- // @ts-ignore
61
- } else if (orderBy[b.field.key] === undefined) {
62
- // @ts-ignore
63
- orderBy = { [b.field.key]: 'asc' }
64
- } else {
65
- orderBy = undefined
66
- }
67
- }
68
-
69
- const sortingIcon = (toSort: boolean, b: Cell<T>, _orderBy: EntityOrderBy<T> | undefined) => {
70
- if (!toSort) {
71
- return
72
- }
73
- // @ts-ignore
74
- if (_orderBy && _orderBy[b.field.key] === 'asc') {
75
- return { data: LibIcon_SortAsc, class: 'text-primary' }
76
- }
77
- // @ts-ignore
78
- if (_orderBy && _orderBy[b.field.key] === 'desc') {
79
- return { data: LibIcon_SortDesc, class: 'text-primary' }
80
- }
81
- return { data: LibIcon_Sort }
82
- }
83
-
84
- const cellsToTake = (cells: Cell<T>[]) => {
85
- return cells.filter((c) => c.modeView !== 'hide')
86
- }
87
- </script>
88
-
89
- <div class="overflow-x-auto">
90
- <table class="table {classes.table} {baseTable}">
91
- <thead>
92
- <tr>
93
- {#each cellsToTake(cells) as b, i}
94
- {@const al = align(b.field, b.kind === 'slot')}
95
- <th class={al}>
96
- {#if b.headerSlot}
97
- <slot name="header" field={b.field} />
98
- {:else}
99
- {@const toSort = orderByCols === true || (orderByCols && orderByCols.includes(b.field?.key))}
100
- {#if toSort}
101
- <button
102
- class="flex items-center justify-between gap-2"
103
- disabled={!toSort}
104
- on:click={() => sorting(toSort ?? false, b)}
105
- >
106
- {b.header ?? b.field?.caption}
107
- {#if toSort}
108
- <Icon {...sortingIcon(toSort ?? false, b, orderBy)}></Icon>
109
- {/if}
110
- </button>
111
- {:else}
112
- {b.header ?? b.field?.caption}
113
- {/if}
114
- {/if}
115
- </th>
116
- {/each}
117
-
118
- {#if withEdit || withDelete || withAdd}
119
- <th class="">
120
- <div class="flex justify-end">
121
- {#if withAdd}
122
- <Button
123
- permission={store.getRepo().metadata.options.permissionApiInsert}
124
- disabled={!store.getRepo().metadata.apiInsertAllowed()}
125
- class="btn btn-square btn-ghost btn-xs"
126
- onclick={() => dispatch('add', {})}
127
- >
128
- <Icon data={LibIcon_Add} />
129
- </Button>
130
- {:else}
131
- <Icon data={LibIcon_Settings}></Icon>
132
- {/if}
133
- </div>
134
- </th>
135
- {/if}
136
- </tr>
137
- </thead>
138
- <tbody>
139
- <!-- Show loading only if there is no items and loading is true, like this on an update, there will be no jump -->
140
- {#if $store.items.length === 0 && $store.loading && store.getRepo().metadata.apiReadAllowed}
141
- <GridLoading columns={getAligns(cells, withEdit || withDelete)} {loadingRows} />
142
- {:else}
143
- {#each $store.items as row}
144
- <tr on:click={() => dispatch('rowclick', row)} class="hover:bg-base-content/20">
145
- {#each cellsToTake(cells) as b}
146
- {@const metaType = getFieldMetaType(b.field)}
147
- <td class={align(b.field, b.kind === 'slot')}>
148
- {#if metaType.kind === 'slot' || b.kind === 'slot'}
149
- <slot name="cell" {row} field={b.field} cell={b} />
150
- {:else if b.kind === 'component'}
151
- {#if b.component}
152
- <div class={b.class}>
153
- <svelte:component
154
- this={b.component}
155
- {...b.props}
156
- {...b.rowToProps ? b.rowToProps(row) : {}}
157
- on:refresh
158
- ></svelte:component>
159
- </div>
160
- {:else}
161
- <pre>Col: {b.col}</pre>
162
- <pre class="bg-error">Component prop needed !</pre>
163
- {/if}
164
- {:else if metaType.kind === 'relation'}
165
- {@const item = getEntityDisplayValue(metaType.repoTarget, row[metaType.field.key])}
166
- <LinkPlus
167
- item={{
168
- ...item,
169
- href: b.field?.options?.href ? b.field?.options.href(row) : item?.href,
170
- }}
171
- />
172
- {:else if b.kind === 'baseItem'}
173
- <LinkPlus item={row[metaType.field.key]} />
174
- {:else if b.kind === 'field_link'}
175
- {@const item = getFieldLinkDisplayValue(metaType.field, row)}
176
- <LinkPlus {item} />
177
- {:else if b.kind === 'entity_link'}
178
- {@const item = getEntityDisplayValueFromField(metaType.field, row)}
179
- <LinkPlus {item} />
180
- {:else if metaType.kind === 'enum'}
181
- {#if metaType.subKind === 'single'}
182
- <LinkPlus item={row[metaType.field.key]}></LinkPlus>
183
- {:else if metaType.subKind === 'multi'}
184
- <!-- {@const t = metaType.field.displayValue(row)} -->
185
- {#each row[metaType.field.key] as enumVal}
186
- <div>
187
- {enumVal.caption}
188
- </div>
189
- {/each}
190
- {/if}
191
- {:else if metaType.subKind === 'checkbox'}
192
- {@const t = metaType.field.displayValue(row)}
193
- {#if t === 'true'}
194
- Oui
195
- {:else if t === 'false'}
196
- Non
197
- {:else}
198
- {t}
199
- {/if}
200
- {:else}
201
- {@const t = displayWithDefaultAndSuffix(metaType.field, row[metaType.field.key])}
202
- {#if b.clipboardable}
203
- <Clipboardable value={t}>
204
- <!-- 20 is a cool value ! -->
205
- <span class={t.length < 20 ? 'text-nowrap' : ''}>
206
- {t}
207
- </span>
208
- </Clipboardable>
209
- {:else}
210
- <!-- 20 is a cool value ! -->
211
- <span class={t.length < 20 ? 'text-nowrap' : ''}>
212
- {t}
213
- </span>
214
- {/if}
215
- {/if}
216
- </td>
217
- {/each}
218
-
219
- {#if withEdit || withDelete}
220
- <td class="text-right">
221
- <div class="flex justify-end gap-2">
222
- {#if withEdit}
223
- <Button
224
- permission={store.getRepo().metadata.options.permissionApiUpdate}
225
- disabled={!store.getRepo().metadata.apiUpdateAllowed()}
226
- class="btn btn-square btn-ghost btn-xs"
227
- onclick={() => dispatch('edit', row)}
228
- >
229
- <Icon data={LibIcon_Edit} />
230
- </Button>
231
- {/if}
232
- {#if withDelete}
233
- <Button
234
- permission={store.getRepo().metadata.options.permissionApiDelete}
235
- disabled={!store.getRepo().metadata.apiDeleteAllowed()}
236
- class="btn btn-square btn-ghost btn-xs"
237
- onclick={() => dispatch('delete', row)}
238
- >
239
- <Icon data={LibIcon_Delete} />
240
- </Button>
241
- {/if}
242
- </div>
243
- </td>
244
- {/if}
245
- </tr>
246
- {:else}
247
- {#if !store.getRepo().metadata.apiReadAllowed}
248
- <tr>
249
- <td colspan={getAligns(cells, withEdit || withDelete).length} class="text-center py-12">
250
- Vous n'avez pas la permission pour ces données!
251
- </td>
252
- </tr>
253
- {:else if dicoNoResult}
254
- <tr>
255
- <td colspan={getAligns(cells, withEdit || withDelete).length} class="text-center py-12">
256
- {dicoNoResult}
257
- </td>
258
- </tr>
259
- {/if}
260
- {/each}
261
- <slot name="extra" />
262
- {/if}
263
- </tbody>
264
- </table>
265
- </div>
@@ -1,57 +0,0 @@
1
- import type { EntityOrderBy } from 'remult';
2
- import type { Cell } from '../internals/cellsBuildor.js';
3
- import { type StoreList } from '../internals/index.js';
4
- declare class __sveltets_Render<T extends Record<any, any>> {
5
- props(): {
6
- cells: Cell<T>[];
7
- store: StoreList<T>;
8
- withAdd?: boolean;
9
- withEdit?: boolean;
10
- withDelete?: boolean;
11
- loadingRows?: number;
12
- classes?: {
13
- table: string;
14
- } | undefined;
15
- orderBy?: EntityOrderBy<T> | undefined;
16
- orderByCols?: true | (keyof T)[] | undefined;
17
- dicoNoResult?: string;
18
- };
19
- events(): {
20
- refresh: any;
21
- add: CustomEvent<any>;
22
- rowclick: CustomEvent<any>;
23
- edit: CustomEvent<any>;
24
- delete: CustomEvent<any>;
25
- } & {
26
- [evt: string]: CustomEvent<any>;
27
- };
28
- slots(): {
29
- header: {
30
- field: import("remult").FieldMetadata<any, T> | undefined;
31
- };
32
- cell: {
33
- row: T;
34
- field: import("remult").FieldMetadata<any, T> | undefined;
35
- cell: Cell<T>;
36
- };
37
- extra: {};
38
- };
39
- bindings(): string;
40
- exports(): {};
41
- }
42
- interface $$IsomorphicComponent {
43
- new <T extends Record<any, any>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']> & {
44
- children?: any;
45
- }>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
46
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
47
- } & ReturnType<__sveltets_Render<T>['exports']>;
48
- <T extends Record<any, any>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {
49
- $$events?: ReturnType<__sveltets_Render<T>['events']>;
50
- $$slots?: ReturnType<__sveltets_Render<T>['slots']>;
51
- children?: any;
52
- }): ReturnType<__sveltets_Render<T>['exports']>;
53
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
54
- }
55
- declare const Grid: $$IsomorphicComponent;
56
- type Grid<T extends Record<any, any>> = InstanceType<typeof Grid<T>>;
57
- export default Grid;
@@ -1,293 +0,0 @@
1
- <script lang="ts" generics="T extends Record<any, any>">
2
- import { createEventDispatcher } from 'svelte'
3
-
4
- import type { EntityOrderBy } from 'remult'
5
-
6
- import type { Cell } from '../internals/cellsBuildor.js'
7
- import {
8
- displayWithDefaultAndSuffix,
9
- getEntityDisplayValue,
10
- getEntityDisplayValueFromField,
11
- getFieldLinkDisplayValue,
12
- getFieldMetaType,
13
- } from '../internals/helper.js'
14
- import { LibIcon_Delete, LibIcon_Edit } from '../internals/index.js'
15
- import { intersection } from '../svelte/actions/intersection.js'
16
- import type { FF_Repo } from '../svelte/FF_Repo.svelte.js'
17
- import Button from './Button.svelte'
18
- import Clipboardable from './Clipboardable.svelte'
19
- import GridLoading from './GridLoading.svelte'
20
- import Icon from './Icon.svelte'
21
- import { align, baseTable, getAligns } from './index.js'
22
- import {
23
- LibIcon_Add,
24
- LibIcon_Settings,
25
- LibIcon_Sort,
26
- LibIcon_SortAsc,
27
- LibIcon_SortDesc,
28
- } from './LibIcon.js'
29
- import LinkPlus from './link/LinkPlus.svelte'
30
-
31
- export let cells: Cell<T>[]
32
- export let r: FF_Repo<any>
33
-
34
- export let withAdd = false
35
- export let withEdit = false
36
- export let withDelete = false
37
-
38
- export let loadingRows = 5
39
-
40
- export let classes = {
41
- // table: 'table-pin-rows table-pin-cols',
42
- table: '',
43
- }
44
- export let orderBy: EntityOrderBy<T> | undefined = undefined
45
- export let orderByCols: (keyof T)[] | true | undefined = undefined
46
-
47
- export let dicoNoResult = 'Aucun résultat !'
48
-
49
- const dispatch = createEventDispatcher()
50
-
51
- const sorting = (toSort: boolean, b: Cell<T>) => {
52
- if (!toSort) {
53
- return
54
- }
55
- if (orderBy === undefined) {
56
- // @ts-ignore
57
- orderBy = { [b.field.key]: 'asc' }
58
- // @ts-ignore
59
- } else if (orderBy[b.field.key] === 'asc') {
60
- // @ts-ignore
61
- orderBy = { [b.field.key]: 'desc' }
62
- // @ts-ignore
63
- } else if (orderBy[b.field.key] === undefined) {
64
- // @ts-ignore
65
- orderBy = { [b.field.key]: 'asc' }
66
- } else {
67
- orderBy = undefined
68
- }
69
- }
70
-
71
- const sortingIcon = (toSort: boolean, b: Cell<T>, _orderBy: EntityOrderBy<T> | undefined) => {
72
- if (!toSort) {
73
- return
74
- }
75
- // @ts-ignore
76
- if (_orderBy && _orderBy[b.field.key] === 'asc') {
77
- return { data: LibIcon_SortAsc, class: 'text-primary' }
78
- }
79
- // @ts-ignore
80
- if (_orderBy && _orderBy[b.field.key] === 'desc') {
81
- return { data: LibIcon_SortDesc, class: 'text-primary' }
82
- }
83
- return { data: LibIcon_Sort }
84
- }
85
-
86
- const cellsToTake = (cells: Cell<T>[]) => {
87
- return cells.filter((c) => c.modeView !== 'hide')
88
- }
89
- </script>
90
-
91
- <div class="overflow-x-auto">
92
- <table class="table {classes.table} {baseTable}">
93
- <thead class="">
94
- <tr class="">
95
- {#each cellsToTake(cells) as b, i}
96
- {@const al = align(b.field, b.kind === 'slot')}
97
- <th class={al}>
98
- {#if b.headerSlot}
99
- <slot name="header" field={b.field} />
100
- {:else}
101
- {@const toSort = orderByCols === true || (orderByCols && orderByCols.includes(b.field?.key))}
102
- {#if toSort}
103
- <button
104
- class="flex items-center justify-between gap-2"
105
- disabled={!toSort}
106
- onclick={() => sorting(toSort ?? false, b)}
107
- >
108
- {b.header ?? b.field?.caption}
109
- {#if toSort}
110
- <Icon {...sortingIcon(toSort ?? false, b, orderBy)}></Icon>
111
- {/if}
112
- </button>
113
- {:else}
114
- {b.header ?? b.field?.caption}
115
- {/if}
116
- {/if}
117
- </th>
118
- {/each}
119
-
120
- {#if withEdit || withDelete || withAdd}
121
- <th class="">
122
- <div class="flex justify-end">
123
- {#if withAdd}
124
- <Button
125
- permission={r.metadata.options.permissionApiInsert}
126
- disabled={!r.metadata.apiInsertAllowed()}
127
- class="btn btn-square btn-ghost btn-xs"
128
- onclick={() => dispatch('add', {})}
129
- >
130
- <Icon data={LibIcon_Add} />
131
- </Button>
132
- {:else}
133
- <Icon data={LibIcon_Settings}></Icon>
134
- {/if}
135
- </div>
136
- </th>
137
- {/if}
138
- </tr>
139
- </thead>
140
- <tbody class="">
141
- {#if r.loading.init && r.metadata.apiReadAllowed}
142
- <GridLoading columns={getAligns(cells, withEdit || withDelete)} {loadingRows} />
143
- {:else}
144
- {#each r.items ?? [] as row}
145
- <tr onclick={() => dispatch('rowclick', row)} class="hover:bg-base-content/20">
146
- {#each cellsToTake(cells) as b}
147
- {@const metaType = getFieldMetaType(b.field)}
148
- <td class={align(b.field, b.kind === 'slot')}>
149
- {#if metaType.kind === 'slot' || b.kind === 'slot'}
150
- <slot name="cell" {row} field={b.field} cell={b} />
151
- {:else if b.kind === 'component'}
152
- {#if b.component}
153
- <div class={b.class}>
154
- <svelte:component
155
- this={b.component}
156
- {...b.props}
157
- {...b.rowToProps ? b.rowToProps(row) : {}}
158
- on:refresh
159
- ></svelte:component>
160
- </div>
161
- {:else if b.componentS5}
162
- {@const Comp = b.componentS5}
163
- <!-- NOT TESTED YET! -->
164
- <div class={b.class}>
165
- <Comp
166
- {...b.props}
167
- {...b.rowToProps ? b.rowToProps(row) : {}}
168
- onrefresh={() => dispatch('refresh')}
169
- />
170
- </div>
171
- {:else}
172
- <pre>Col: {b.col}</pre>
173
- <pre class="bg-error">Component prop needed !</pre>
174
- {/if}
175
- {:else if metaType.kind === 'relation'}
176
- {@const item = getEntityDisplayValue(metaType.repoTarget, row[metaType.field.key])}
177
- <LinkPlus
178
- item={{
179
- ...item,
180
- href: b.field?.options?.href ? b.field?.options.href(row) : item?.href,
181
- }}
182
- />
183
- {:else if b.kind === 'baseItem'}
184
- <LinkPlus item={row[metaType.field.key]} />
185
- {:else if b.kind === 'field_link'}
186
- {@const item = getFieldLinkDisplayValue(metaType.field, row)}
187
- <LinkPlus {item} />
188
- {:else if b.kind === 'entity_link'}
189
- {@const item = getEntityDisplayValueFromField(metaType.field, row)}
190
- <LinkPlus {item} />
191
- {:else if metaType.kind === 'enum'}
192
- {#if metaType.subKind === 'single'}
193
- <LinkPlus item={row[metaType.field.key]}></LinkPlus>
194
- {:else if metaType.subKind === 'multi'}
195
- <!-- {@const t = metaType.field.displayValue(row)} -->
196
- {#each row[metaType.field.key] as enumVal}
197
- <div>
198
- {enumVal.caption}
199
- </div>
200
- {/each}
201
- {/if}
202
- {:else if metaType.subKind === 'checkbox'}
203
- {@const t = metaType.field.displayValue(row)}
204
- {t === 'true' ? 'Oui' : 'Non'}
205
- {:else}
206
- {@const t = displayWithDefaultAndSuffix(metaType.field, row[metaType.field.key])}
207
- {#if b.clipboardable}
208
- <Clipboardable value={t}>
209
- <!-- 20 is a cool value ! -->
210
- <span class={t.length < 20 ? 'text-nowrap' : ''}>
211
- {t}
212
- </span>
213
- </Clipboardable>
214
- {:else}
215
- <!-- 20 is a cool value ! -->
216
- <span class={t.length < 20 ? 'text-nowrap' : ''}>
217
- {t}
218
- </span>
219
- {/if}
220
- {/if}
221
- </td>
222
- {/each}
223
-
224
- {#if withEdit || withDelete}
225
- <td class="text-right">
226
- <div class="flex justify-end gap-2">
227
- {#if withEdit}
228
- <Button
229
- permission={r.metadata.options.permissionApiUpdate}
230
- disabled={!r.metadata.apiUpdateAllowed()}
231
- class="btn btn-square btn-ghost btn-xs"
232
- onclick={() => dispatch('edit', row)}
233
- >
234
- <Icon data={LibIcon_Edit} />
235
- </Button>
236
- {/if}
237
- {#if withDelete}
238
- <Button
239
- permission={r.metadata.options.permissionApiDelete}
240
- disabled={!r.metadata.apiDeleteAllowed()}
241
- class="btn btn-square btn-ghost btn-xs"
242
- onclick={() => dispatch('delete', row)}
243
- >
244
- <Icon data={LibIcon_Delete} />
245
- </Button>
246
- {/if}
247
- </div>
248
- </td>
249
- {/if}
250
- </tr>
251
- {:else}
252
- {#if !r.metadata.apiReadAllowed}
253
- <tr>
254
- <td colspan={getAligns(cells, withEdit || withDelete).length} class="text-center py-12">
255
- Vous n'avez pas la permission pour ces données!
256
- </td>
257
- </tr>
258
- {:else if dicoNoResult}
259
- <tr>
260
- <td colspan={getAligns(cells, withEdit || withDelete).length} class="text-center py-12">
261
- {dicoNoResult}
262
- </td>
263
- </tr>
264
- {/if}
265
- {/each}
266
- {#if r.loading.more}
267
- <GridLoading columns={getAligns(cells, withEdit || withDelete)} {loadingRows} />
268
- {/if}
269
- <slot name="extra" />
270
- {/if}
271
- </tbody>
272
- </table>
273
-
274
- {#if r.hasNextPage}
275
- <div
276
- use:intersection={{ rootMargin: '177px' }}
277
- onintersecting={() => {
278
- // console.info('intersecting')
279
- // if (r.hasNextPage) {
280
- // r.queryMore()
281
- // }
282
- }}
283
- class="mt-2 flex justify-end"
284
- >
285
- <Button
286
- class={r.loading.more ? 'btn-disabled' : 'btn-primary'}
287
- onclick={() => {
288
- r.queryMore()
289
- }}>Plus</Button
290
- >
291
- </div>
292
- {/if}
293
- </div>
@@ -1,57 +0,0 @@
1
- import type { EntityOrderBy } from 'remult';
2
- import type { Cell } from '../internals/cellsBuildor.js';
3
- import type { FF_Repo } from '../svelte/FF_Repo.svelte.js';
4
- declare class __sveltets_Render<T extends Record<any, any>> {
5
- props(): {
6
- cells: Cell<T>[];
7
- r: FF_Repo<any>;
8
- withAdd?: boolean;
9
- withEdit?: boolean;
10
- withDelete?: boolean;
11
- loadingRows?: number;
12
- classes?: {
13
- table: string;
14
- } | undefined;
15
- orderBy?: EntityOrderBy<T> | undefined;
16
- orderByCols?: true | (keyof T)[] | undefined;
17
- dicoNoResult?: string;
18
- };
19
- events(): {
20
- refresh: CustomEvent<any>;
21
- add: CustomEvent<any>;
22
- rowclick: CustomEvent<any>;
23
- edit: CustomEvent<any>;
24
- delete: CustomEvent<any>;
25
- } & {
26
- [evt: string]: CustomEvent<any>;
27
- };
28
- slots(): {
29
- header: {
30
- field: import("remult").FieldMetadata<any, T> | undefined;
31
- };
32
- cell: {
33
- row: any;
34
- field: import("remult").FieldMetadata<any, T> | undefined;
35
- cell: Cell<T>;
36
- };
37
- extra: {};
38
- };
39
- bindings(): string;
40
- exports(): {};
41
- }
42
- interface $$IsomorphicComponent {
43
- new <T extends Record<any, any>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']> & {
44
- children?: any;
45
- }>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
46
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
47
- } & ReturnType<__sveltets_Render<T>['exports']>;
48
- <T extends Record<any, any>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {
49
- $$events?: ReturnType<__sveltets_Render<T>['events']>;
50
- $$slots?: ReturnType<__sveltets_Render<T>['slots']>;
51
- children?: any;
52
- }): ReturnType<__sveltets_Render<T>['exports']>;
53
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
54
- }
55
- declare const Grid2: $$IsomorphicComponent;
56
- type Grid2<T extends Record<any, any>> = InstanceType<typeof Grid2<T>>;
57
- export default Grid2;