@humandialog/forms.svelte 1.3.17 → 1.4.1

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 (43) hide show
  1. package/components/Fab.svelte +99 -48
  2. package/components/combo/combo.svelte +18 -15
  3. package/components/combo/combo.svelte.d.ts +1 -0
  4. package/components/contextmenu.svelte +54 -16
  5. package/components/date.svelte +10 -4
  6. package/components/date.svelte.d.ts +1 -0
  7. package/components/date_utils.d.ts +1 -0
  8. package/components/date_utils.js +10 -0
  9. package/components/delayed.spinner.svelte +1 -2
  10. package/components/document/editor.svelte +419 -46
  11. package/components/document/editor.svelte.d.ts +115 -0
  12. package/components/document/internal/palette.svelte +22 -0
  13. package/components/kanban/internal/kanban.card.svelte +2 -2
  14. package/components/kanban/internal/kanban.props.svelte +1 -1
  15. package/components/list/List.d.ts +6 -0
  16. package/components/list/List.js +6 -0
  17. package/components/list/internal/list.element.props.svelte +23 -8
  18. package/components/list/internal/list.element.svelte +20 -8
  19. package/components/list/list.combo.svelte +6 -0
  20. package/components/list/list.combo.svelte.d.ts +3 -0
  21. package/components/list/list.date.svelte +8 -0
  22. package/components/list/list.date.svelte.d.ts +4 -0
  23. package/components/list/list.static.svelte +6 -0
  24. package/components/list/list.static.svelte.d.ts +3 -0
  25. package/components/list/list.tags.svelte +32 -0
  26. package/components/list/list.tags.svelte.d.ts +24 -0
  27. package/components/menu.js +4 -0
  28. package/components/sidebar/sidebar.item.svelte +15 -11
  29. package/components/tags.svelte +15 -7
  30. package/components/tags.svelte.d.ts +2 -0
  31. package/desk.svelte +5 -5
  32. package/horizontal.toolbar.svelte +41 -14
  33. package/horizontal.toolbar.svelte.d.ts +6 -2
  34. package/index.d.ts +8 -2
  35. package/index.js +8 -2
  36. package/operations.svelte +71 -19
  37. package/package.json +4 -2
  38. package/stores.d.ts +3 -0
  39. package/stores.js +25 -2
  40. package/tenant.members.svelte +63 -59
  41. package/tenant.members.svelte.d.ts +2 -0
  42. package/vertical.toolbar.svelte +51 -23
  43. package/vertical.toolbar.svelte.d.ts +6 -2
@@ -4,7 +4,8 @@
4
4
  FaPen,
5
5
  FaInfoCircle,
6
6
  FaUserSlash,
7
- FaChevronDown} from 'svelte-icons/fa'
7
+ FaChevronDown,
8
+ FaInfo} from 'svelte-icons/fa'
8
9
 
9
10
  import Page from './page.svelte'
10
11
  import List from './components/list/list.svelte'
@@ -32,6 +33,7 @@
32
33
  export let nameAttrib = "Name";
33
34
  export let emailAttrib = "login";
34
35
  export let refAttrib = "$ref";
36
+ export let hrefAttrib = ''
35
37
  export let showFiles = false;
36
38
  //export let show_admin = true;
37
39
  export let showAccessRoles = false;
@@ -101,7 +103,10 @@
101
103
  avatar_url : "",
102
104
  invitation_not_accepted: false,
103
105
  removed: false,
104
- membership_tag: ""
106
+ membership_tag: "",
107
+ ... hrefAttrib ? {
108
+ [hrefAttrib]: u[hrefAttrib]
109
+ } : { }
105
110
  }
106
111
  )
107
112
  })
@@ -110,7 +115,7 @@
110
115
  //fake_users = [];
111
116
  //add_fake_users(fake_users);
112
117
 
113
- await fetch_details();
118
+ // await fetch_details();
114
119
 
115
120
  }
116
121
 
@@ -136,6 +141,13 @@
136
141
 
137
142
  }
138
143
 
144
+ async function fetch_user_details(reef_user)
145
+ {
146
+ let details = await reef.get(`/sys/user_details?email=${reef_user[emailAttrib]}`)
147
+ set_user_info(reef_user, details);
148
+ list?.reload(reef_users);
149
+ }
150
+
139
151
  function set_user_info(user, info)
140
152
  {
141
153
  user.auth_group = info.auth_group ?? 0;
@@ -285,25 +297,27 @@
285
297
  }
286
298
 
287
299
  let page_operations={
288
- opver: 1,
300
+ opver: 2,
301
+ fab: 'M00',
289
302
  operations: [
290
303
  {
291
304
  caption: 'View',
292
305
  operations: [
293
306
  {
294
307
  icon: FaUserPlus,
295
- caption: '',
308
+ caption: 'Add user',
296
309
  action: (focused) => { create_new_user(); },
297
- fab: 'M10',
310
+ // fab: 'M10',
298
311
  tbr: 'A'
299
312
  },
300
- {
313
+ // przenieść na stronie /profile
314
+ /* {
301
315
  icon: FaUserSlash,
302
- caption: '',
316
+ caption: 'Delete application account',
303
317
  action: (f) => {askToDeleteApplicationAccount();},
304
- fab: 'S00',
318
+ //fab: 'S00',
305
319
  tbr: 'C'
306
- }
320
+ }*/
307
321
  ]
308
322
  }
309
323
  ]
@@ -317,18 +331,14 @@
317
331
  action: (focused) => { list.edit(user, nameAttrib) }
318
332
  },
319
333
  {
320
- caption: 'Users management',
334
+ caption: 'Users management (auth role)',
321
335
  action: (focused) => { list.edit(user, 'Privileges') }
322
336
  }];
323
337
 
324
338
  if(showAccessRoles)
325
339
  {
326
340
  operations.push({
327
- separator: true
328
- });
329
-
330
- operations.push({
331
- caption: 'Access role',
341
+ caption: 'Access role (app role)',
332
342
  action: (focused) => { list.edit(user, 'Access') }
333
343
  });
334
344
  }
@@ -336,7 +346,7 @@
336
346
  if(showFiles)
337
347
  {
338
348
  operations.push({
339
- caption: 'External files',
349
+ caption: 'External files (files role)',
340
350
  action: (focused) => { list.edit(user, 'Files') }
341
351
  });
342
352
  }
@@ -346,74 +356,63 @@
346
356
 
347
357
  let user_operations = (user) => {
348
358
 
349
- let operations = [];
359
+ let operations = [
360
+ {
361
+ caption: 'Fetch info',
362
+ icon: FaInfo,
363
+ action: (f) => fetch_user_details(user),
364
+ tbr: 'A'
365
+ }
366
+ ];
350
367
 
351
368
  if(user.removed)
352
369
  {
353
- operations = [
370
+ operations = [ ...operations,
354
371
  {
355
372
  icon: FaUserPlus,
356
- caption: '',
373
+ caption: 'Revert removing',
357
374
  action: (f) => askToAddAgain(user),
358
- fab: 'M10',
359
- tbr: 'B'
375
+ // fab: 'M10',
376
+ tbr: 'A'
360
377
  }
361
378
  ];
362
379
  }
363
380
  else
364
381
  {
365
382
  let edit_operations = get_edit_operations(user)
366
- if(edit_operations.length == 1)
367
- {
368
- operations.push({
369
- icon: FaPen,
370
- caption: '',
371
- action: edit_operations[0].action,
372
- fab: 'M20',
373
- tbr: 'B'
374
- });
375
- }
376
- else
377
- {
378
- operations.push({
379
- icon: FaPen,
380
- caption: '',
381
- grid: edit_operations,
382
- fab: 'M20',
383
- tbr: 'B'
384
- });
385
- }
386
-
383
+
387
384
  operations.push({
388
- caption: '',
385
+ icon: FaPen,
386
+ caption: 'Change',
387
+ menu: edit_operations,
388
+ //fab: 'M20',
389
+ tbr: 'A'
390
+ });
391
+
392
+ operations.push({
393
+ caption: 'Remove user',
389
394
  icon: FaUserMinus,
390
395
  action: (focused) => askToRemove(user),
391
- fab: 'M30',
392
- tbr: 'B'
396
+ // fab: 'M30',
397
+ tbr: 'A'
393
398
  });
394
399
  }
395
400
 
396
401
 
397
402
  return {
398
- opver: 1,
403
+ opver: 2,
404
+ fab: 'M00',
399
405
  operations: [
400
406
  {
401
407
  caption: 'User',
408
+ // tbr: 'B',
402
409
  operations: operations
403
410
  }
404
411
  ]
405
412
  }
406
413
  }
407
414
 
408
- let user_context_menu = (user) => {
409
- if(user.removed)
410
- return [];
411
-
412
- let edit_operations = get_edit_operations(user);
413
- return {
414
- grid: edit_operations
415
- }
416
- }
415
+
417
416
 
418
417
  let data_item =
419
418
  {
@@ -695,7 +694,13 @@
695
694
  create_new_user();
696
695
  }
697
696
 
698
-
697
+ function getHRefFunc()
698
+ {
699
+ if(!hrefAttrib)
700
+ return undefined
701
+ else
702
+ return (user) => { return user[hrefAttrib]}
703
+ }
699
704
 
700
705
  </script>
701
706
 
@@ -713,9 +718,8 @@
713
718
  <List objects={reef_users}
714
719
  title='Members'
715
720
  toolbarOperations={user_operations}
716
- contextMenu={user_context_menu}
717
721
  bind:this={list}>
718
- <ListTitle a={nameAttrib} onChange={on_name_changed}/>
722
+ <ListTitle a={nameAttrib} onChange={on_name_changed} hrefFunc={getHRefFunc()}/>
719
723
  <ListSummary a={emailAttrib} readonly/>
720
724
 
721
725
  <ListStaticProperty name="Membership" a="membership_tag"/>
@@ -6,6 +6,7 @@ export default class Tenant extends SvelteComponentTyped<{
6
6
  nameAttrib?: string | undefined;
7
7
  emailAttrib?: string | undefined;
8
8
  refAttrib?: string | undefined;
9
+ hrefAttrib?: string | undefined;
9
10
  showFiles?: boolean | undefined;
10
11
  showAccessRoles?: boolean | undefined;
11
12
  }, {
@@ -22,6 +23,7 @@ declare const __propDef: {
22
23
  nameAttrib?: string | undefined;
23
24
  emailAttrib?: string | undefined;
24
25
  refAttrib?: string | undefined;
26
+ hrefAttrib?: string | undefined;
25
27
  showFiles?: boolean | undefined;
26
28
  showAccessRoles?: boolean | undefined;
27
29
  };
@@ -28,10 +28,12 @@
28
28
  import { popNavigationPage } from './utils';
29
29
 
30
30
 
31
- export let appConfig;
31
+ export let appConfig = undefined;
32
32
  export let mobile=false;
33
33
  export let clearsContext = 'sel props'
34
34
 
35
+ export let definedTabs = undefined
36
+ export let mainToolbarConfig = undefined
35
37
 
36
38
  let tabs = new Array();
37
39
  let config = null;
@@ -46,10 +48,19 @@
46
48
  let can_add_new_group = false;
47
49
 
48
50
  $: {
49
- config = appConfig.mainToolbar;
50
- has_selection_details = appConfig.selectionDetails;
51
- if(has_selection_details)
52
- selection_detils_caption = appConfig.selectionDetails.caption ?? 'Properties'
51
+ if(appConfig)
52
+ {
53
+ config = appConfig.mainToolbar;
54
+ has_selection_details = appConfig.selectionDetails;
55
+ if(has_selection_details)
56
+ selection_detils_caption = appConfig.selectionDetails.caption ?? 'Properties'
57
+ }
58
+ else
59
+ {
60
+ has_selection_details = false;
61
+ config = mainToolbarConfig;
62
+ }
63
+
53
64
  is_logged_in = $session.isActive;
54
65
  show_sign_in_out_icons = config.signin ? true : false;
55
66
  sign_in_href = $signInHRef;
@@ -57,23 +68,38 @@
57
68
 
58
69
  tabs = new Array();
59
70
 
60
- Object.keys(appConfig.sidebar).forEach( (key) =>
61
- {
62
- const ctab = appConfig.sidebar[key];
63
- const can_show = (ctab.authorized && is_logged_in) || (!ctab.authorized)
64
- if(can_show)
65
- tabs.push({key: key, icon: ctab.icon});
66
- });
67
-
68
- // there is no current visible sidebar
69
- if($main_sidebar_visible_store != '*')
71
+ if(definedTabs && Array.isArray(definedTabs) && definedTabs.length > 0)
70
72
  {
71
- if(tabs.every( (e) => e.key != $main_sidebar_visible_store))
73
+ tabs = [...definedTabs]
74
+ }
75
+ else
76
+ {
77
+ Object.keys(appConfig.sidebar).forEach( (key) =>
78
+ {
79
+ const ctab = appConfig.sidebar[key];
80
+ const can_show = (ctab.authorized && is_logged_in) || (!ctab.authorized)
81
+ if(can_show)
82
+ {
83
+ const tab = {
84
+ key: key,
85
+ icon: ctab.icon,
86
+ onclick: (e) => on_navigator_tab_clicked(e, key)
87
+ }
88
+
89
+ tabs.push(tab);
90
+ }
91
+ });
92
+
93
+ // there is no current visible sidebar
94
+ if($main_sidebar_visible_store != '*')
72
95
  {
73
- if(tabs.length)
74
- show_sidebar(tabs[0].key);
75
- else
76
- hide_sidebar();
96
+ if(tabs.every( (e) => e.key != $main_sidebar_visible_store))
97
+ {
98
+ if(tabs.length)
99
+ show_sidebar(tabs[0].key);
100
+ else
101
+ hide_sidebar();
102
+ }
77
103
  }
78
104
  }
79
105
 
@@ -94,9 +120,11 @@
94
120
 
95
121
  }
96
122
 
97
- function on_tab_clicked(key)
123
+ function on_navigator_tab_clicked(e, key)
98
124
  {
99
- if(!mobile)
125
+ e.stopPropagation();
126
+
127
+ if(!mobile)
100
128
  toggle_sidebar(key);
101
129
  else
102
130
  {
@@ -331,7 +359,7 @@
331
359
  <button
332
360
  class="h-16 px-0 flex justify-center items-center w-full text-stone-300 hover:text-stone-100"
333
361
  class:bg-orange-500={isSelected}
334
- on:click|stopPropagation={()=> (on_tab_clicked(tab.key))}>
362
+ on:click={tab.onclick}>
335
363
 
336
364
  <Icon class="w-5 h-5" component={tab.icon}/>
337
365
  </button>
@@ -2,9 +2,11 @@
2
2
  /** @typedef {typeof __propDef.events} VerticalEvents */
3
3
  /** @typedef {typeof __propDef.slots} VerticalSlots */
4
4
  export default class Vertical extends SvelteComponentTyped<{
5
- appConfig: any;
5
+ appConfig?: any;
6
6
  mobile?: boolean | undefined;
7
7
  clearsContext?: string | undefined;
8
+ definedTabs?: any;
9
+ mainToolbarConfig?: any;
8
10
  }, {
9
11
  [evt: string]: CustomEvent<any>;
10
12
  }, {}> {
@@ -15,9 +17,11 @@ export type VerticalSlots = typeof __propDef.slots;
15
17
  import { SvelteComponentTyped } from "svelte";
16
18
  declare const __propDef: {
17
19
  props: {
18
- appConfig: any;
20
+ appConfig?: any;
19
21
  mobile?: boolean | undefined;
20
22
  clearsContext?: string | undefined;
23
+ definedTabs?: any;
24
+ mainToolbarConfig?: any;
21
25
  };
22
26
  events: {
23
27
  [evt: string]: CustomEvent<any>;