@budibase/frontend-core 2.6.8-alpha.7 → 2.6.8-alpha.8

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/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@budibase/frontend-core",
3
- "version": "2.6.8-alpha.7",
3
+ "version": "2.6.8-alpha.8",
4
4
  "description": "Budibase frontend core libraries used in builder and client",
5
5
  "author": "Budibase",
6
6
  "license": "MPL-2.0",
7
7
  "svelte": "src/index.js",
8
8
  "dependencies": {
9
- "@budibase/bbui": "2.6.8-alpha.7",
10
- "@budibase/shared-core": "2.6.8-alpha.7",
9
+ "@budibase/bbui": "2.6.8-alpha.8",
10
+ "@budibase/shared-core": "2.6.8-alpha.8",
11
11
  "dayjs": "^1.11.7",
12
12
  "lodash": "^4.17.21",
13
13
  "socket.io-client": "^4.6.1",
14
14
  "svelte": "^3.46.2"
15
15
  },
16
- "gitHead": "8dbc8a1e86558a8ce8cf1c2af931257eeed692eb"
16
+ "gitHead": "cf3b55766d32b62ff0098b93afc1ca4b10124bcd"
17
17
  }
@@ -32,6 +32,7 @@
32
32
  $: readonly =
33
33
  column.schema.autocolumn ||
34
34
  column.schema.disabled ||
35
+ column.schema.type === "formula" ||
35
36
  (!$config.allowEditRows && row._id)
36
37
 
37
38
  // Register this cell API if the row is focused
@@ -1,12 +1,17 @@
1
1
  <script>
2
2
  import dayjs from "dayjs"
3
3
  import { CoreDatePicker, Icon } from "@budibase/bbui"
4
+ import { onMount } from "svelte"
4
5
 
5
6
  export let value
6
7
  export let schema
7
8
  export let onChange
8
9
  export let focused = false
9
10
  export let readonly = false
11
+ export let api
12
+
13
+ let flatpickr
14
+ let isOpen
10
15
 
11
16
  // adding the 0- will turn a string like 00:00:00 into a valid ISO
12
17
  // date, but will make actual ISO dates invalid
@@ -19,6 +24,26 @@
19
24
  ? "MMM D YYYY"
20
25
  : "MMM D YYYY, HH:mm"
21
26
  $: editable = focused && !readonly
27
+
28
+ // Ensure we close flatpickr when unselected
29
+ $: {
30
+ if (!focused) {
31
+ flatpickr?.close()
32
+ }
33
+ }
34
+
35
+ const onKeyDown = () => {
36
+ return isOpen
37
+ }
38
+
39
+ onMount(() => {
40
+ api = {
41
+ onKeyDown,
42
+ focus: () => flatpickr?.open(),
43
+ blur: () => flatpickr?.close(),
44
+ isActive: () => isOpen,
45
+ }
46
+ })
22
47
  </script>
23
48
 
24
49
  <div class="container">
@@ -42,6 +67,10 @@
42
67
  {timeOnly}
43
68
  time24hr
44
69
  ignoreTimezones={schema.ignoreTimezones}
70
+ bind:flatpickr
71
+ on:open={() => (isOpen = true)}
72
+ on:close={() => (isOpen = false)}
73
+ useKeyboardShortcuts={false}
45
74
  />
46
75
  </div>
47
76
  {/if}
@@ -1,6 +1,13 @@
1
1
  <script>
2
- import { clickOutside, Menu, MenuItem, notifications } from "@budibase/bbui"
2
+ import {
3
+ clickOutside,
4
+ Menu,
5
+ MenuItem,
6
+ Helpers,
7
+ notifications,
8
+ } from "@budibase/bbui"
3
9
  import { getContext } from "svelte"
10
+ import { NewRowID } from "../lib/constants"
4
11
 
5
12
  const {
6
13
  focusedRow,
@@ -14,9 +21,11 @@
14
21
  clipboard,
15
22
  dispatch,
16
23
  focusedCellAPI,
24
+ focusedRowId,
17
25
  } = getContext("grid")
18
26
 
19
27
  $: style = makeStyle($menu)
28
+ $: isNewRow = $focusedRowId === NewRowID
20
29
 
21
30
  const makeStyle = menu => {
22
31
  return `left:${menu.left}px; top:${menu.top}px;`
@@ -36,6 +45,11 @@
36
45
  $focusedCellId = `${newRow._id}-${column}`
37
46
  }
38
47
  }
48
+
49
+ const copyToClipboard = async value => {
50
+ await Helpers.copyToClipboard(value)
51
+ notifications.success("Copied to clipboard")
52
+ }
39
53
  </script>
40
54
 
41
55
  {#if $menu.visible}
@@ -58,22 +72,38 @@
58
72
  </MenuItem>
59
73
  <MenuItem
60
74
  icon="Maximize"
61
- disabled={!$config.allowEditRows}
75
+ disabled={isNewRow || !$config.allowEditRows}
62
76
  on:click={() => dispatch("edit-row", $focusedRow)}
63
77
  on:click={menu.actions.close}
64
78
  >
65
79
  Edit row in modal
66
80
  </MenuItem>
81
+ <MenuItem
82
+ icon="Copy"
83
+ disabled={isNewRow || !$focusedRow?._id}
84
+ on:click={() => copyToClipboard($focusedRow?._id)}
85
+ on:click={menu.actions.close}
86
+ >
87
+ Copy row _id
88
+ </MenuItem>
89
+ <MenuItem
90
+ icon="Copy"
91
+ disabled={isNewRow || !$focusedRow?._rev}
92
+ on:click={() => copyToClipboard($focusedRow?._rev)}
93
+ on:click={menu.actions.close}
94
+ >
95
+ Copy row _rev
96
+ </MenuItem>
67
97
  <MenuItem
68
98
  icon="Duplicate"
69
- disabled={!$config.allowAddRows}
99
+ disabled={isNewRow || !$config.allowAddRows}
70
100
  on:click={duplicate}
71
101
  >
72
102
  Duplicate row
73
103
  </MenuItem>
74
104
  <MenuItem
75
105
  icon="Delete"
76
- disabled={!$config.allowDeleteRows}
106
+ disabled={isNewRow || !$config.allowDeleteRows}
77
107
  on:click={deleteRow}
78
108
  >
79
109
  Delete row
@@ -338,15 +338,11 @@ export const deriveStores = context => {
338
338
  ...state,
339
339
  [rowId]: true,
340
340
  }))
341
- const newRow = { ...row, ...get(rowChangeCache)[rowId] }
342
- const saved = await API.saveRow(newRow)
341
+ const saved = await API.saveRow({ ...row, ...get(rowChangeCache)[rowId] })
343
342
 
344
343
  // Update state after a successful change
345
344
  rows.update(state => {
346
- state[index] = {
347
- ...newRow,
348
- _rev: saved._rev,
349
- }
345
+ state[index] = saved
350
346
  return state.slice()
351
347
  })
352
348
  rowChangeCache.update(state => {