draggable-dashboard-lete-pro 1.5.4
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/dist/components/AddTileModal.js +160 -0
- package/dist/components/DashboardTile.js +159 -0
- package/dist/components/DraggableDashboard.js +562 -0
- package/dist/components/TileContent.js +494 -0
- package/dist/constants.js +6 -0
- package/dist/index.js +6 -0
- package/dist/services/dashboardTileDB.js +102 -0
- package/dist/types.js +20 -0
- package/package.json +74 -0
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
6
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
7
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
8
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
9
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
10
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
11
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
12
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
13
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
14
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
15
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
16
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
17
|
+
import React, { useState, useEffect } from 'react';
|
|
18
|
+
import { TileType } from '../types';
|
|
19
|
+
import Chart from 'react-apexcharts';
|
|
20
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
21
|
+
var EmptyState = function EmptyState(_ref) {
|
|
22
|
+
var type = _ref.type,
|
|
23
|
+
title = _ref.title,
|
|
24
|
+
description = _ref.description,
|
|
25
|
+
buttonLabel = _ref.buttonLabel;
|
|
26
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
27
|
+
className: "flex flex-col items-center justify-center h-full text-center p-6 space-y-4",
|
|
28
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
29
|
+
className: "w-20 h-20 bg-slate-50 dark:bg-slate-700/30 rounded-full flex items-center justify-center mb-2",
|
|
30
|
+
children: /*#__PURE__*/_jsx("img", {
|
|
31
|
+
src: "https://api.dicebear.com/7.x/shapes/svg?seed=".concat(type, "&backgroundColor=f1f5f9"),
|
|
32
|
+
alt: "Empty",
|
|
33
|
+
className: "w-12 h-12 opacity-30"
|
|
34
|
+
})
|
|
35
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
36
|
+
className: "max-w-xs space-y-1",
|
|
37
|
+
children: [/*#__PURE__*/_jsx("h4", {
|
|
38
|
+
className: "text-sm font-bold text-slate-700 dark:text-slate-200",
|
|
39
|
+
children: title
|
|
40
|
+
}), /*#__PURE__*/_jsx("p", {
|
|
41
|
+
className: "text-[11px] text-slate-500 dark:text-slate-400 leading-relaxed",
|
|
42
|
+
children: description
|
|
43
|
+
})]
|
|
44
|
+
}), /*#__PURE__*/_jsx("button", {
|
|
45
|
+
className: "px-5 py-2 bg-indigo-600 hover:bg-indigo-700 text-white text-[11px] font-bold rounded-lg transition-all shadow-sm active:scale-95",
|
|
46
|
+
children: buttonLabel
|
|
47
|
+
})]
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
var RecentList = function RecentList(_ref2) {
|
|
51
|
+
var data = _ref2.data;
|
|
52
|
+
var items = data || [{
|
|
53
|
+
id: '1',
|
|
54
|
+
title: 'Project Roadmap 2024',
|
|
55
|
+
location: 'Team Space',
|
|
56
|
+
type: 'LIST'
|
|
57
|
+
}, {
|
|
58
|
+
id: '2',
|
|
59
|
+
title: 'Product Specification v2',
|
|
60
|
+
location: 'Drafts',
|
|
61
|
+
type: 'DOC'
|
|
62
|
+
}, {
|
|
63
|
+
id: '3',
|
|
64
|
+
title: 'Marketing Assets',
|
|
65
|
+
location: 'Internal Docs',
|
|
66
|
+
type: 'FOLDER'
|
|
67
|
+
}];
|
|
68
|
+
return /*#__PURE__*/_jsx("div", {
|
|
69
|
+
className: "space-y-1",
|
|
70
|
+
children: items.map(function (item, idx) {
|
|
71
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
72
|
+
className: "flex items-center group cursor-pointer hover:bg-slate-50 dark:hover:bg-slate-700/50 p-3 rounded-xl transition-all",
|
|
73
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
74
|
+
className: "w-9 h-9 rounded-lg bg-slate-100 dark:bg-slate-700 flex items-center justify-center mr-4 text-slate-400 group-hover:bg-indigo-600 group-hover:text-white shrink-0 transition-colors",
|
|
75
|
+
children: /*#__PURE__*/_jsx("svg", {
|
|
76
|
+
className: "w-5 h-5",
|
|
77
|
+
fill: "none",
|
|
78
|
+
stroke: "currentColor",
|
|
79
|
+
viewBox: "0 0 24 24",
|
|
80
|
+
strokeWidth: 2,
|
|
81
|
+
children: /*#__PURE__*/_jsx("path", {
|
|
82
|
+
strokeLinecap: "round",
|
|
83
|
+
strokeLinejoin: "round",
|
|
84
|
+
d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
|
|
85
|
+
})
|
|
86
|
+
})
|
|
87
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
88
|
+
className: "flex-1 min-w-0",
|
|
89
|
+
children: [/*#__PURE__*/_jsx("h5", {
|
|
90
|
+
className: "text-sm font-semibold text-slate-700 dark:text-slate-200 truncate",
|
|
91
|
+
children: item.title
|
|
92
|
+
}), /*#__PURE__*/_jsxs("p", {
|
|
93
|
+
className: "text-[10px] text-slate-400 font-bold uppercase tracking-tight",
|
|
94
|
+
children: ["in ", item.location]
|
|
95
|
+
})]
|
|
96
|
+
})]
|
|
97
|
+
}, item.id || idx);
|
|
98
|
+
})
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
var PortfolioTable = function PortfolioTable(_ref3) {
|
|
102
|
+
var data = _ref3.data;
|
|
103
|
+
var items = data || [{
|
|
104
|
+
name: 'Infrastructure Migration',
|
|
105
|
+
progress: 65,
|
|
106
|
+
status: 'Active',
|
|
107
|
+
priority: 'High'
|
|
108
|
+
}, {
|
|
109
|
+
name: 'Mobile App Refresh',
|
|
110
|
+
progress: 30,
|
|
111
|
+
status: 'Active',
|
|
112
|
+
priority: 'Normal'
|
|
113
|
+
}, {
|
|
114
|
+
name: 'Customer Portal',
|
|
115
|
+
progress: 100,
|
|
116
|
+
status: 'Done',
|
|
117
|
+
priority: 'Urgent'
|
|
118
|
+
}];
|
|
119
|
+
return /*#__PURE__*/_jsx("div", {
|
|
120
|
+
className: "overflow-x-auto h-full scrollbar-hide",
|
|
121
|
+
children: /*#__PURE__*/_jsxs("table", {
|
|
122
|
+
className: "w-full text-left",
|
|
123
|
+
children: [/*#__PURE__*/_jsx("thead", {
|
|
124
|
+
className: "text-[10px] text-slate-400 uppercase tracking-widest sticky top-0 bg-white dark:bg-slate-800 z-10 border-b border-slate-100 dark:border-slate-700",
|
|
125
|
+
children: /*#__PURE__*/_jsxs("tr", {
|
|
126
|
+
children: [/*#__PURE__*/_jsx("th", {
|
|
127
|
+
className: "py-3 font-bold",
|
|
128
|
+
children: "Name"
|
|
129
|
+
}), /*#__PURE__*/_jsx("th", {
|
|
130
|
+
className: "py-3 font-bold",
|
|
131
|
+
children: "Progress"
|
|
132
|
+
}), /*#__PURE__*/_jsx("th", {
|
|
133
|
+
className: "py-3 font-bold",
|
|
134
|
+
children: "Status"
|
|
135
|
+
})]
|
|
136
|
+
})
|
|
137
|
+
}), /*#__PURE__*/_jsx("tbody", {
|
|
138
|
+
className: "divide-y divide-slate-50 dark:divide-slate-700/30",
|
|
139
|
+
children: items.map(function (item, idx) {
|
|
140
|
+
return /*#__PURE__*/_jsxs("tr", {
|
|
141
|
+
className: "hover:bg-slate-50/50 dark:hover:bg-slate-700/20 transition-colors",
|
|
142
|
+
children: [/*#__PURE__*/_jsx("td", {
|
|
143
|
+
className: "py-4 pr-3",
|
|
144
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
145
|
+
className: "flex flex-col",
|
|
146
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
147
|
+
className: "text-xs font-bold text-slate-700 dark:text-slate-200 truncate max-w-[150px]",
|
|
148
|
+
children: item.name
|
|
149
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
150
|
+
className: "text-[9px] font-black uppercase ".concat(item.priority === 'Urgent' ? 'text-red-500' : 'text-slate-400'),
|
|
151
|
+
children: item.priority
|
|
152
|
+
})]
|
|
153
|
+
})
|
|
154
|
+
}), /*#__PURE__*/_jsx("td", {
|
|
155
|
+
className: "py-4 pr-4 min-w-[100px]",
|
|
156
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
157
|
+
className: "w-full bg-slate-100 dark:bg-slate-700 rounded-full h-1.5 overflow-hidden",
|
|
158
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
159
|
+
className: "h-full ".concat(item.progress === 100 ? 'bg-emerald-500' : 'bg-indigo-500'),
|
|
160
|
+
style: {
|
|
161
|
+
width: "".concat(item.progress, "%")
|
|
162
|
+
}
|
|
163
|
+
})
|
|
164
|
+
})
|
|
165
|
+
}), /*#__PURE__*/_jsx("td", {
|
|
166
|
+
className: "py-4",
|
|
167
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
168
|
+
className: "px-2 py-1 rounded-md text-[9px] font-black uppercase tracking-wider ".concat(item.status === 'Done' ? 'bg-emerald-100 text-emerald-700' : 'bg-indigo-100 text-indigo-700'),
|
|
169
|
+
children: item.status
|
|
170
|
+
})
|
|
171
|
+
})]
|
|
172
|
+
}, idx);
|
|
173
|
+
})
|
|
174
|
+
})]
|
|
175
|
+
})
|
|
176
|
+
});
|
|
177
|
+
};
|
|
178
|
+
var SalesApexChart = function SalesApexChart(_ref4) {
|
|
179
|
+
var data = _ref4.data;
|
|
180
|
+
var options = {
|
|
181
|
+
chart: {
|
|
182
|
+
type: 'donut',
|
|
183
|
+
fontFamily: 'Inter, sans-serif',
|
|
184
|
+
toolbar: {
|
|
185
|
+
show: false
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
colors: ['#6366f1', '#10b981', '#f59e0b', '#ef4444'],
|
|
189
|
+
labels: ['Completed', 'To Do', 'In Progress', 'Blocked'],
|
|
190
|
+
legend: {
|
|
191
|
+
position: 'bottom',
|
|
192
|
+
fontSize: '11px',
|
|
193
|
+
fontWeight: 600,
|
|
194
|
+
markers: {
|
|
195
|
+
radius: 12,
|
|
196
|
+
width: 10,
|
|
197
|
+
height: 10
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
dataLabels: {
|
|
201
|
+
enabled: false
|
|
202
|
+
},
|
|
203
|
+
stroke: {
|
|
204
|
+
width: 0
|
|
205
|
+
},
|
|
206
|
+
plotOptions: {
|
|
207
|
+
pie: {
|
|
208
|
+
donut: {
|
|
209
|
+
size: '75%',
|
|
210
|
+
labels: {
|
|
211
|
+
show: true,
|
|
212
|
+
total: {
|
|
213
|
+
show: true,
|
|
214
|
+
label: 'TOTAL',
|
|
215
|
+
color: '#94a3b8',
|
|
216
|
+
fontSize: '10px',
|
|
217
|
+
fontWeight: 800,
|
|
218
|
+
formatter: function formatter(w) {
|
|
219
|
+
return w.globals.seriesTotals.reduce(function (a, b) {
|
|
220
|
+
return a + b;
|
|
221
|
+
}, 0);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
return /*#__PURE__*/_jsx("div", {
|
|
230
|
+
className: "w-full h-full min-h-[200px] flex items-center justify-center",
|
|
231
|
+
children: /*#__PURE__*/_jsx(Chart, {
|
|
232
|
+
options: options,
|
|
233
|
+
series: (data === null || data === void 0 ? void 0 : data.series) || [44, 55, 41, 17],
|
|
234
|
+
type: "donut",
|
|
235
|
+
width: "100%",
|
|
236
|
+
height: "100%"
|
|
237
|
+
})
|
|
238
|
+
});
|
|
239
|
+
};
|
|
240
|
+
export var TileContent = function TileContent(_ref5) {
|
|
241
|
+
var tile = _ref5.tile,
|
|
242
|
+
editMode = _ref5.editMode,
|
|
243
|
+
setTiles = _ref5.setTiles,
|
|
244
|
+
fetchers = _ref5.fetchers,
|
|
245
|
+
renderTable = _ref5.renderTable,
|
|
246
|
+
renderChart = _ref5.renderChart,
|
|
247
|
+
renderImage = _ref5.renderImage,
|
|
248
|
+
renderNumber = _ref5.renderNumber,
|
|
249
|
+
renderTileContent = _ref5.renderTileContent;
|
|
250
|
+
var _useState = useState(null),
|
|
251
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
252
|
+
data = _useState2[0],
|
|
253
|
+
setData = _useState2[1];
|
|
254
|
+
var _useState3 = useState(false),
|
|
255
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
256
|
+
loading = _useState4[0],
|
|
257
|
+
setLoading = _useState4[1];
|
|
258
|
+
useEffect(function () {
|
|
259
|
+
var isMounted = true;
|
|
260
|
+
var loadData = /*#__PURE__*/function () {
|
|
261
|
+
var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
262
|
+
var result, _t, _t2, _t3, _t4, _t5, _t6;
|
|
263
|
+
return _regenerator().w(function (_context) {
|
|
264
|
+
while (1) switch (_context.p = _context.n) {
|
|
265
|
+
case 0:
|
|
266
|
+
if (fetchers) {
|
|
267
|
+
_context.n = 1;
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
return _context.a(2);
|
|
271
|
+
case 1:
|
|
272
|
+
setLoading(true);
|
|
273
|
+
_context.p = 2;
|
|
274
|
+
_t = tile.type;
|
|
275
|
+
_context.n = _t === TileType.RECENT ? 3 : _t === TileType.TABLE ? 7 : _t === TileType.NUMBER ? 11 : _t === TileType.CHART ? 15 : 19;
|
|
276
|
+
break;
|
|
277
|
+
case 3:
|
|
278
|
+
if (!fetchers.fetchRecentItems) {
|
|
279
|
+
_context.n = 5;
|
|
280
|
+
break;
|
|
281
|
+
}
|
|
282
|
+
_context.n = 4;
|
|
283
|
+
return fetchers.fetchRecentItems();
|
|
284
|
+
case 4:
|
|
285
|
+
_t2 = _context.v;
|
|
286
|
+
_context.n = 6;
|
|
287
|
+
break;
|
|
288
|
+
case 5:
|
|
289
|
+
_t2 = null;
|
|
290
|
+
case 6:
|
|
291
|
+
result = _t2;
|
|
292
|
+
return _context.a(3, 19);
|
|
293
|
+
case 7:
|
|
294
|
+
if (!fetchers.fetchPortfolioData) {
|
|
295
|
+
_context.n = 9;
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
298
|
+
_context.n = 8;
|
|
299
|
+
return fetchers.fetchPortfolioData(tile.reportId);
|
|
300
|
+
case 8:
|
|
301
|
+
_t3 = _context.v;
|
|
302
|
+
_context.n = 10;
|
|
303
|
+
break;
|
|
304
|
+
case 9:
|
|
305
|
+
_t3 = null;
|
|
306
|
+
case 10:
|
|
307
|
+
result = _t3;
|
|
308
|
+
return _context.a(3, 19);
|
|
309
|
+
case 11:
|
|
310
|
+
if (!fetchers.fetchCalculationValue) {
|
|
311
|
+
_context.n = 13;
|
|
312
|
+
break;
|
|
313
|
+
}
|
|
314
|
+
_context.n = 12;
|
|
315
|
+
return fetchers.fetchCalculationValue(tile.dataSource);
|
|
316
|
+
case 12:
|
|
317
|
+
_t4 = _context.v;
|
|
318
|
+
_context.n = 14;
|
|
319
|
+
break;
|
|
320
|
+
case 13:
|
|
321
|
+
_t4 = null;
|
|
322
|
+
case 14:
|
|
323
|
+
result = _t4;
|
|
324
|
+
return _context.a(3, 19);
|
|
325
|
+
case 15:
|
|
326
|
+
if (!fetchers.fetchChartData) {
|
|
327
|
+
_context.n = 17;
|
|
328
|
+
break;
|
|
329
|
+
}
|
|
330
|
+
_context.n = 16;
|
|
331
|
+
return fetchers.fetchChartData(tile.reportId, tile.chartConfigId);
|
|
332
|
+
case 16:
|
|
333
|
+
_t5 = _context.v;
|
|
334
|
+
_context.n = 18;
|
|
335
|
+
break;
|
|
336
|
+
case 17:
|
|
337
|
+
_t5 = null;
|
|
338
|
+
case 18:
|
|
339
|
+
result = _t5;
|
|
340
|
+
return _context.a(3, 19);
|
|
341
|
+
case 19:
|
|
342
|
+
if (isMounted) setData(result);
|
|
343
|
+
_context.n = 21;
|
|
344
|
+
break;
|
|
345
|
+
case 20:
|
|
346
|
+
_context.p = 20;
|
|
347
|
+
_t6 = _context.v;
|
|
348
|
+
console.error('Failed to fetch widget data:', _t6);
|
|
349
|
+
case 21:
|
|
350
|
+
_context.p = 21;
|
|
351
|
+
if (isMounted) setLoading(false);
|
|
352
|
+
return _context.f(21);
|
|
353
|
+
case 22:
|
|
354
|
+
return _context.a(2);
|
|
355
|
+
}
|
|
356
|
+
}, _callee, null, [[2, 20, 21, 22]]);
|
|
357
|
+
}));
|
|
358
|
+
return function loadData() {
|
|
359
|
+
return _ref6.apply(this, arguments);
|
|
360
|
+
};
|
|
361
|
+
}();
|
|
362
|
+
loadData();
|
|
363
|
+
return function () {
|
|
364
|
+
isMounted = false;
|
|
365
|
+
};
|
|
366
|
+
}, [tile.type, tile.reportId, tile.dataSource, fetchers]);
|
|
367
|
+
var handleTextChange = function handleTextChange(e) {
|
|
368
|
+
if (!setTiles) return;
|
|
369
|
+
setTiles(function (prev) {
|
|
370
|
+
return prev.map(function (t) {
|
|
371
|
+
return t.id === tile.id ? _objectSpread(_objectSpread({}, t), {}, {
|
|
372
|
+
textValue: e.target.value
|
|
373
|
+
}) : t;
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
};
|
|
377
|
+
if (loading) return /*#__PURE__*/_jsx("div", {
|
|
378
|
+
className: "flex items-center justify-center h-full",
|
|
379
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
380
|
+
className: "w-6 h-6 border-3 border-indigo-500 border-t-transparent rounded-full animate-spin"
|
|
381
|
+
})
|
|
382
|
+
});
|
|
383
|
+
switch (tile.type) {
|
|
384
|
+
case TileType.TEXT:
|
|
385
|
+
if (editMode) {
|
|
386
|
+
return /*#__PURE__*/_jsx("textarea", {
|
|
387
|
+
className: "w-full h-full p-0 bg-transparent resize-none border-none outline-none text-sm text-slate-600 dark:text-slate-400 leading-relaxed scrollbar-hide",
|
|
388
|
+
value: tile.textValue || '',
|
|
389
|
+
onChange: handleTextChange,
|
|
390
|
+
placeholder: "Type your notes here..."
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
return /*#__PURE__*/_jsx("div", {
|
|
394
|
+
className: "h-full overflow-auto scrollbar-hide",
|
|
395
|
+
children: /*#__PURE__*/_jsx("p", {
|
|
396
|
+
className: "text-sm text-slate-600 dark:text-slate-400 leading-relaxed whitespace-pre-wrap",
|
|
397
|
+
children: tile.textValue || 'No content provided.'
|
|
398
|
+
})
|
|
399
|
+
});
|
|
400
|
+
case TileType.RECENT:
|
|
401
|
+
return /*#__PURE__*/_jsx(RecentList, {
|
|
402
|
+
data: data
|
|
403
|
+
});
|
|
404
|
+
case TileType.BOOKMARK:
|
|
405
|
+
return /*#__PURE__*/_jsx(EmptyState, {
|
|
406
|
+
type: "bookmark",
|
|
407
|
+
title: "Bookmarks",
|
|
408
|
+
description: "Bookmarks make it easy to save items or any URL from around the web.",
|
|
409
|
+
buttonLabel: "Add Bookmark"
|
|
410
|
+
});
|
|
411
|
+
case TileType.DOCS:
|
|
412
|
+
return /*#__PURE__*/_jsx(EmptyState, {
|
|
413
|
+
type: "docs",
|
|
414
|
+
title: "Docs",
|
|
415
|
+
description: "There are no Docs in this location yet. Create one to get started.",
|
|
416
|
+
buttonLabel: "Add a Doc"
|
|
417
|
+
});
|
|
418
|
+
case TileType.FOLDERS:
|
|
419
|
+
return /*#__PURE__*/_jsx(EmptyState, {
|
|
420
|
+
type: "folder",
|
|
421
|
+
title: "Folders",
|
|
422
|
+
description: "Add new Folder to your Space to organize your lists.",
|
|
423
|
+
buttonLabel: "Add Folder"
|
|
424
|
+
});
|
|
425
|
+
case TileType.TABLE:
|
|
426
|
+
return renderTable ? /*#__PURE__*/_jsx(_Fragment, {
|
|
427
|
+
children: renderTable({
|
|
428
|
+
reportId: tile.reportId,
|
|
429
|
+
data: data
|
|
430
|
+
})
|
|
431
|
+
}) : /*#__PURE__*/_jsx(PortfolioTable, {
|
|
432
|
+
data: data
|
|
433
|
+
});
|
|
434
|
+
case TileType.CHART:
|
|
435
|
+
return renderChart ? /*#__PURE__*/_jsx(_Fragment, {
|
|
436
|
+
children: renderChart({
|
|
437
|
+
reportId: tile.reportId,
|
|
438
|
+
chartConfigId: tile.chartConfigId,
|
|
439
|
+
data: data
|
|
440
|
+
})
|
|
441
|
+
}) : /*#__PURE__*/_jsx(SalesApexChart, {
|
|
442
|
+
data: data
|
|
443
|
+
});
|
|
444
|
+
case TileType.NUMBER:
|
|
445
|
+
var val = data !== null ? data : tile.numberValue || 0;
|
|
446
|
+
return renderNumber ? /*#__PURE__*/_jsx(_Fragment, {
|
|
447
|
+
children: renderNumber({
|
|
448
|
+
value: val,
|
|
449
|
+
title: tile.title
|
|
450
|
+
})
|
|
451
|
+
}) : /*#__PURE__*/_jsxs("div", {
|
|
452
|
+
className: "flex flex-col items-center justify-center h-full text-center",
|
|
453
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
454
|
+
className: "flex items-baseline",
|
|
455
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
456
|
+
className: "text-2xl sm:text-3xl font-light text-slate-400 mr-1.5",
|
|
457
|
+
children: "$"
|
|
458
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
459
|
+
className: "text-4xl sm:text-6xl font-black text-slate-800 dark:text-white tracking-tighter",
|
|
460
|
+
children: val.toLocaleString()
|
|
461
|
+
})]
|
|
462
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
463
|
+
className: "text-[10px] font-black uppercase tracking-[0.2em] text-slate-400 mt-4",
|
|
464
|
+
children: "CURRENT TOTAL"
|
|
465
|
+
})]
|
|
466
|
+
});
|
|
467
|
+
case TileType.IMAGE:
|
|
468
|
+
return renderImage ? /*#__PURE__*/_jsx(_Fragment, {
|
|
469
|
+
children: renderImage({
|
|
470
|
+
imageUrl: tile.imageUrl,
|
|
471
|
+
title: tile.title
|
|
472
|
+
})
|
|
473
|
+
}) : /*#__PURE__*/_jsx("div", {
|
|
474
|
+
className: "w-full h-full relative",
|
|
475
|
+
children: /*#__PURE__*/_jsx("img", {
|
|
476
|
+
src: tile.imageUrl,
|
|
477
|
+
className: "w-full h-full object-cover rounded-xl shadow-lg",
|
|
478
|
+
alt: tile.title
|
|
479
|
+
})
|
|
480
|
+
});
|
|
481
|
+
case TileType.CUSTOM:
|
|
482
|
+
return renderTileContent ? /*#__PURE__*/_jsx(_Fragment, {
|
|
483
|
+
children: renderTileContent(tile)
|
|
484
|
+
}) : /*#__PURE__*/_jsx("div", {
|
|
485
|
+
className: "p-4 text-sm text-slate-600 dark:text-slate-400 bg-slate-50 dark:bg-slate-800/50 rounded-xl h-full",
|
|
486
|
+
children: tile.content || 'Custom Widget Content Area'
|
|
487
|
+
});
|
|
488
|
+
default:
|
|
489
|
+
return /*#__PURE__*/_jsx("div", {
|
|
490
|
+
className: "p-4 text-slate-400 italic text-xs",
|
|
491
|
+
children: "Unknown Widget Type"
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { DraggableDashboard } from './components/DraggableDashboard';
|
|
2
|
+
export { DashboardTile } from './components/DashboardTile';
|
|
3
|
+
export { TileContent } from './components/TileContent';
|
|
4
|
+
export { AddTileModal } from './components/AddTileModal';
|
|
5
|
+
export * from './types';
|
|
6
|
+
export * from './constants';
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
2
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
3
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
4
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
5
|
+
var DB_NAME = 'DashboardTileDB';
|
|
6
|
+
var STORE_NAME = 'tilePositions';
|
|
7
|
+
var DB_VERSION = 1;
|
|
8
|
+
var openDB = function openDB() {
|
|
9
|
+
return new Promise(function (resolve, reject) {
|
|
10
|
+
var request = indexedDB.open(DB_NAME, DB_VERSION);
|
|
11
|
+
request.onupgradeneeded = function () {
|
|
12
|
+
var db = request.result;
|
|
13
|
+
if (!db.objectStoreNames.contains(STORE_NAME)) {
|
|
14
|
+
db.createObjectStore(STORE_NAME);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
request.onsuccess = function () {
|
|
18
|
+
return resolve(request.result);
|
|
19
|
+
};
|
|
20
|
+
request.onerror = function () {
|
|
21
|
+
return reject(request.error);
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
export var getPositions = /*#__PURE__*/function () {
|
|
26
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(dashboardId) {
|
|
27
|
+
var db;
|
|
28
|
+
return _regenerator().w(function (_context) {
|
|
29
|
+
while (1) switch (_context.n) {
|
|
30
|
+
case 0:
|
|
31
|
+
_context.n = 1;
|
|
32
|
+
return openDB();
|
|
33
|
+
case 1:
|
|
34
|
+
db = _context.v;
|
|
35
|
+
return _context.a(2, new Promise(function (resolve, reject) {
|
|
36
|
+
var transaction = db.transaction(STORE_NAME, 'readonly');
|
|
37
|
+
var store = transaction.objectStore(STORE_NAME);
|
|
38
|
+
var request = store.get(dashboardId);
|
|
39
|
+
request.onsuccess = function () {
|
|
40
|
+
return resolve(request.result || {});
|
|
41
|
+
};
|
|
42
|
+
request.onerror = function () {
|
|
43
|
+
return reject(request.error);
|
|
44
|
+
};
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
}, _callee);
|
|
48
|
+
}));
|
|
49
|
+
return function getPositions(_x) {
|
|
50
|
+
return _ref.apply(this, arguments);
|
|
51
|
+
};
|
|
52
|
+
}();
|
|
53
|
+
export var setPositions = /*#__PURE__*/function () {
|
|
54
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(dashboardId, positions) {
|
|
55
|
+
var db;
|
|
56
|
+
return _regenerator().w(function (_context2) {
|
|
57
|
+
while (1) switch (_context2.n) {
|
|
58
|
+
case 0:
|
|
59
|
+
_context2.n = 1;
|
|
60
|
+
return openDB();
|
|
61
|
+
case 1:
|
|
62
|
+
db = _context2.v;
|
|
63
|
+
return _context2.a(2, new Promise(function (resolve, reject) {
|
|
64
|
+
var transaction = db.transaction(STORE_NAME, 'readwrite');
|
|
65
|
+
var store = transaction.objectStore(STORE_NAME);
|
|
66
|
+
var request = store.put(positions, dashboardId);
|
|
67
|
+
request.onsuccess = function () {
|
|
68
|
+
return resolve();
|
|
69
|
+
};
|
|
70
|
+
request.onerror = function () {
|
|
71
|
+
return reject(request.error);
|
|
72
|
+
};
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
}, _callee2);
|
|
76
|
+
}));
|
|
77
|
+
return function setPositions(_x2, _x3) {
|
|
78
|
+
return _ref2.apply(this, arguments);
|
|
79
|
+
};
|
|
80
|
+
}();
|
|
81
|
+
export var removeTilePosition = /*#__PURE__*/function () {
|
|
82
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(dashboardId, tileId) {
|
|
83
|
+
var positions;
|
|
84
|
+
return _regenerator().w(function (_context3) {
|
|
85
|
+
while (1) switch (_context3.n) {
|
|
86
|
+
case 0:
|
|
87
|
+
_context3.n = 1;
|
|
88
|
+
return getPositions(dashboardId);
|
|
89
|
+
case 1:
|
|
90
|
+
positions = _context3.v;
|
|
91
|
+
delete positions[tileId];
|
|
92
|
+
_context3.n = 2;
|
|
93
|
+
return setPositions(dashboardId, positions);
|
|
94
|
+
case 2:
|
|
95
|
+
return _context3.a(2);
|
|
96
|
+
}
|
|
97
|
+
}, _callee3);
|
|
98
|
+
}));
|
|
99
|
+
return function removeTilePosition(_x4, _x5) {
|
|
100
|
+
return _ref3.apply(this, arguments);
|
|
101
|
+
};
|
|
102
|
+
}();
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export var TileType = /*#__PURE__*/function (TileType) {
|
|
2
|
+
TileType["NUMBER"] = "NUMBER";
|
|
3
|
+
TileType["TABLE"] = "TABLE";
|
|
4
|
+
TileType["CHART"] = "CHART";
|
|
5
|
+
TileType["IMAGE"] = "IMAGE";
|
|
6
|
+
TileType["TEXT"] = "TEXT";
|
|
7
|
+
TileType["RECENT"] = "RECENT";
|
|
8
|
+
TileType["BOOKMARK"] = "BOOKMARK";
|
|
9
|
+
TileType["DOCS"] = "DOCS";
|
|
10
|
+
TileType["FOLDERS"] = "FOLDERS";
|
|
11
|
+
TileType["CUSTOM"] = "CUSTOM";
|
|
12
|
+
return TileType;
|
|
13
|
+
}({});
|
|
14
|
+
export var AlignmentMode = /*#__PURE__*/function (AlignmentMode) {
|
|
15
|
+
AlignmentMode["FREESTYLE"] = "FREESTYLE";
|
|
16
|
+
AlignmentMode["ROW"] = "ROW";
|
|
17
|
+
AlignmentMode["COLUMN"] = "COLUMN";
|
|
18
|
+
AlignmentMode["ALPHABETICAL"] = "ALPHABETICAL";
|
|
19
|
+
return AlignmentMode;
|
|
20
|
+
}({});
|