powr-sdk-web 3.1.0 → 3.2.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.
- package/ADMIN_USAGE.md +129 -0
- package/dist/admin/AdminDashboard.js +331 -0
- package/dist/admin/index.js +62 -0
- package/dist/index.js +7 -0
- package/dist/utils/auth.js +5 -2
- package/package.json +1 -1
package/ADMIN_USAGE.md
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Admin Dashboard Usage Guide
|
|
2
|
+
|
|
3
|
+
The `powr-sdk-web` now includes a **complete self-contained admin system** that eliminates the need for separate routes and components.
|
|
4
|
+
|
|
5
|
+
## 🚀 **Revolutionary Approach**
|
|
6
|
+
|
|
7
|
+
**No more separate admin routes!** The AdminDashboard now handles everything internally:
|
|
8
|
+
|
|
9
|
+
- ✅ **Single Component** - Everything in one place
|
|
10
|
+
- ✅ **No Route Management** - No need for `/admin/users`, `/admin/functions`, etc.
|
|
11
|
+
- ✅ **Internal Navigation** - Click cards to switch between sections
|
|
12
|
+
- ✅ **Back Button** - Easy navigation back to dashboard
|
|
13
|
+
- ✅ **Consistent Styling** - Unified look across all sections
|
|
14
|
+
|
|
15
|
+
## Basic Usage
|
|
16
|
+
|
|
17
|
+
```jsx
|
|
18
|
+
// spriny-web/src/app/admin/page.tsx
|
|
19
|
+
"use client";
|
|
20
|
+
|
|
21
|
+
import ProtectedAdminRoute from "@/components/ProtectedAdminRoute";
|
|
22
|
+
import { AdminDashboard } from 'powr-sdk-web';
|
|
23
|
+
import { Users, FileText, Bell, Code } from "lucide-react";
|
|
24
|
+
|
|
25
|
+
export default function AdminPage() {
|
|
26
|
+
const adminCards = [
|
|
27
|
+
{
|
|
28
|
+
title: "Users",
|
|
29
|
+
description: "Manage project users, roles, and access levels",
|
|
30
|
+
icon: Users
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
title: "Functions",
|
|
34
|
+
description: "Manage dynamic API functions and endpoints",
|
|
35
|
+
icon: Code
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
title: "Invoices",
|
|
39
|
+
description: "View and manage project invoices",
|
|
40
|
+
icon: FileText
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
title: "Notifications",
|
|
44
|
+
description: "Manage system notifications and alerts",
|
|
45
|
+
icon: Bell
|
|
46
|
+
}
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<ProtectedAdminRoute>
|
|
51
|
+
<AdminDashboard
|
|
52
|
+
projectId={process.env.NEXT_PUBLIC_PROJECT_ID}
|
|
53
|
+
adminCards={adminCards}
|
|
54
|
+
/>
|
|
55
|
+
</ProtectedAdminRoute>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Admin Card Configuration
|
|
61
|
+
|
|
62
|
+
Each admin card only needs these properties:
|
|
63
|
+
|
|
64
|
+
```jsx
|
|
65
|
+
{
|
|
66
|
+
title: "Section Name", // Required: Display name
|
|
67
|
+
description: "Description", // Required: Section description
|
|
68
|
+
icon: IconComponent // Optional: Lucide React icon
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## How It Works
|
|
73
|
+
|
|
74
|
+
1. **Dashboard View** - Shows all admin cards
|
|
75
|
+
2. **Click Any Card** - Opens that section internally
|
|
76
|
+
3. **Back Button** - Returns to dashboard
|
|
77
|
+
4. **No Page Reloads** - Smooth SPA experience
|
|
78
|
+
|
|
79
|
+
## Supported Admin Sections
|
|
80
|
+
|
|
81
|
+
The dashboard automatically handles these sections:
|
|
82
|
+
- **Users** - User management
|
|
83
|
+
- **Functions** - Dynamic API functions
|
|
84
|
+
- **Notifications** - System notifications
|
|
85
|
+
- **Invoices** - Invoice management
|
|
86
|
+
- **Slides** - Slide management
|
|
87
|
+
- **Forms** - Form management
|
|
88
|
+
- **Waitlist** - Waitlist management
|
|
89
|
+
|
|
90
|
+
## Benefits
|
|
91
|
+
|
|
92
|
+
✅ **Zero Route Management** - No need to create `/admin/*` routes
|
|
93
|
+
✅ **Single Component** - Everything in one place
|
|
94
|
+
✅ **No Duplication** - Single source of truth
|
|
95
|
+
✅ **Consistent UX** - Same interface everywhere
|
|
96
|
+
✅ **Easy Maintenance** - Update once, affects all projects
|
|
97
|
+
✅ **SPA Experience** - No page reloads, smooth navigation
|
|
98
|
+
|
|
99
|
+
## Customization
|
|
100
|
+
|
|
101
|
+
### Themes
|
|
102
|
+
- `"default"` - Light theme
|
|
103
|
+
- `"dark"` - Dark theme
|
|
104
|
+
|
|
105
|
+
```jsx
|
|
106
|
+
<AdminDashboard
|
|
107
|
+
projectId={process.env.NEXT_PUBLIC_PROJECT_ID}
|
|
108
|
+
adminCards={adminCards}
|
|
109
|
+
theme="dark" // Optional: "default" or "dark"
|
|
110
|
+
/>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Migration from Old Approach
|
|
114
|
+
|
|
115
|
+
**Before (Multiple Routes):**
|
|
116
|
+
```
|
|
117
|
+
/admin/page.tsx
|
|
118
|
+
/admin/users/page.tsx
|
|
119
|
+
/admin/functions/page.tsx
|
|
120
|
+
/admin/notifications/page.tsx
|
|
121
|
+
/admin/invoices/page.tsx
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**After (Single Component):**
|
|
125
|
+
```
|
|
126
|
+
/admin/page.tsx // That's it!
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**All the individual admin route files can now be deleted!** 🎉
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
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); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
|
+
var _admin = _interopRequireDefault(require("../users/admin"));
|
|
11
|
+
var _admin2 = _interopRequireDefault(require("../functions/admin"));
|
|
12
|
+
var _admin3 = _interopRequireDefault(require("../notifications/admin"));
|
|
13
|
+
var _admin4 = _interopRequireDefault(require("../invoices/admin"));
|
|
14
|
+
var _admin5 = _interopRequireDefault(require("../slides/admin"));
|
|
15
|
+
var _admin6 = _interopRequireDefault(require("../forms/admin"));
|
|
16
|
+
var _admin7 = _interopRequireDefault(require("../waitlists/admin"));
|
|
17
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
18
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
19
|
+
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; }
|
|
20
|
+
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; }
|
|
21
|
+
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; }
|
|
22
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
23
|
+
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); }
|
|
24
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
25
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
26
|
+
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."); }
|
|
27
|
+
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; } }
|
|
28
|
+
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; }
|
|
29
|
+
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; } }
|
|
30
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } // Import all admin components
|
|
31
|
+
var AdminDashboard = function AdminDashboard(_ref) {
|
|
32
|
+
var projectId = _ref.projectId,
|
|
33
|
+
_ref$adminCards = _ref.adminCards,
|
|
34
|
+
adminCards = _ref$adminCards === void 0 ? [] : _ref$adminCards,
|
|
35
|
+
_ref$theme = _ref.theme,
|
|
36
|
+
theme = _ref$theme === void 0 ? "default" : _ref$theme;
|
|
37
|
+
var _useState = (0, _react.useState)(null),
|
|
38
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
39
|
+
currentSection = _useState2[0],
|
|
40
|
+
setCurrentSection = _useState2[1];
|
|
41
|
+
var getThemeStyles = function getThemeStyles() {
|
|
42
|
+
var baseStyles = {
|
|
43
|
+
container: {
|
|
44
|
+
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif',
|
|
45
|
+
padding: '24px',
|
|
46
|
+
maxWidth: '1200px',
|
|
47
|
+
margin: '0 auto'
|
|
48
|
+
},
|
|
49
|
+
header: {
|
|
50
|
+
marginBottom: '32px'
|
|
51
|
+
},
|
|
52
|
+
title: {
|
|
53
|
+
fontSize: '32px',
|
|
54
|
+
fontWeight: '800',
|
|
55
|
+
color: '#1f2937',
|
|
56
|
+
margin: '0 0 8px 0',
|
|
57
|
+
lineHeight: '1.2'
|
|
58
|
+
},
|
|
59
|
+
subtitle: {
|
|
60
|
+
fontSize: '16px',
|
|
61
|
+
color: '#6b7280',
|
|
62
|
+
margin: '0'
|
|
63
|
+
},
|
|
64
|
+
backButton: {
|
|
65
|
+
background: 'none',
|
|
66
|
+
border: 'none',
|
|
67
|
+
color: '#3b82f6',
|
|
68
|
+
fontSize: '16px',
|
|
69
|
+
cursor: 'pointer',
|
|
70
|
+
padding: '8px 0',
|
|
71
|
+
marginBottom: '16px',
|
|
72
|
+
display: 'flex',
|
|
73
|
+
alignItems: 'center',
|
|
74
|
+
gap: '8px'
|
|
75
|
+
},
|
|
76
|
+
grid: {
|
|
77
|
+
display: 'grid',
|
|
78
|
+
gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))',
|
|
79
|
+
gap: '24px',
|
|
80
|
+
marginBottom: '32px'
|
|
81
|
+
},
|
|
82
|
+
card: {
|
|
83
|
+
background: '#ffffff',
|
|
84
|
+
border: '1px solid #e5e7eb',
|
|
85
|
+
borderRadius: '12px',
|
|
86
|
+
padding: '24px',
|
|
87
|
+
transition: 'all 0.2s ease',
|
|
88
|
+
cursor: 'pointer',
|
|
89
|
+
boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)'
|
|
90
|
+
},
|
|
91
|
+
cardHover: {
|
|
92
|
+
boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',
|
|
93
|
+
transform: 'translateY(-2px)'
|
|
94
|
+
},
|
|
95
|
+
cardHeader: {
|
|
96
|
+
display: 'flex',
|
|
97
|
+
alignItems: 'center',
|
|
98
|
+
marginBottom: '16px'
|
|
99
|
+
},
|
|
100
|
+
cardIcon: {
|
|
101
|
+
width: '24px',
|
|
102
|
+
height: '24px',
|
|
103
|
+
marginRight: '12px'
|
|
104
|
+
},
|
|
105
|
+
cardTitle: {
|
|
106
|
+
fontSize: '18px',
|
|
107
|
+
fontWeight: '600',
|
|
108
|
+
color: '#1f2937',
|
|
109
|
+
margin: '0'
|
|
110
|
+
},
|
|
111
|
+
cardDescription: {
|
|
112
|
+
fontSize: '14px',
|
|
113
|
+
color: '#6b7280',
|
|
114
|
+
margin: '0 0 16px 0',
|
|
115
|
+
lineHeight: '1.5'
|
|
116
|
+
},
|
|
117
|
+
cardButton: {
|
|
118
|
+
width: '100%',
|
|
119
|
+
padding: '12px 16px',
|
|
120
|
+
background: '#3b82f6',
|
|
121
|
+
color: '#ffffff',
|
|
122
|
+
border: 'none',
|
|
123
|
+
borderRadius: '8px',
|
|
124
|
+
fontSize: '14px',
|
|
125
|
+
fontWeight: '500',
|
|
126
|
+
cursor: 'pointer',
|
|
127
|
+
transition: 'background-color 0.2s ease'
|
|
128
|
+
},
|
|
129
|
+
cardButtonHover: {
|
|
130
|
+
background: '#2563eb'
|
|
131
|
+
},
|
|
132
|
+
statsCard: {
|
|
133
|
+
background: '#ffffff',
|
|
134
|
+
border: '1px solid #e5e7eb',
|
|
135
|
+
borderRadius: '12px',
|
|
136
|
+
padding: '24px',
|
|
137
|
+
marginTop: '32px'
|
|
138
|
+
},
|
|
139
|
+
statsGrid: {
|
|
140
|
+
display: 'grid',
|
|
141
|
+
gridTemplateColumns: 'repeat(auto-fit, minmax(150px, 1fr))',
|
|
142
|
+
gap: '16px'
|
|
143
|
+
},
|
|
144
|
+
statItem: {
|
|
145
|
+
textAlign: 'center'
|
|
146
|
+
},
|
|
147
|
+
statValue: {
|
|
148
|
+
fontSize: '24px',
|
|
149
|
+
fontWeight: '700',
|
|
150
|
+
color: '#3b82f6',
|
|
151
|
+
margin: '0 0 4px 0'
|
|
152
|
+
},
|
|
153
|
+
statLabel: {
|
|
154
|
+
fontSize: '14px',
|
|
155
|
+
color: '#6b7280',
|
|
156
|
+
margin: '0'
|
|
157
|
+
},
|
|
158
|
+
sectionContainer: {
|
|
159
|
+
background: '#ffffff',
|
|
160
|
+
border: '1px solid #e5e7eb',
|
|
161
|
+
borderRadius: '12px',
|
|
162
|
+
padding: '24px',
|
|
163
|
+
marginTop: '16px'
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
// Theme variations
|
|
168
|
+
if (theme === 'dark') {
|
|
169
|
+
baseStyles.container.backgroundColor = '#1f2937';
|
|
170
|
+
baseStyles.title.color = '#f9fafb';
|
|
171
|
+
baseStyles.subtitle.color = '#9ca3af';
|
|
172
|
+
baseStyles.card.backgroundColor = '#374151';
|
|
173
|
+
baseStyles.card.borderColor = '#4b5563';
|
|
174
|
+
baseStyles.cardTitle.color = '#f9fafb';
|
|
175
|
+
baseStyles.cardDescription.color = '#9ca3af';
|
|
176
|
+
baseStyles.statsCard.backgroundColor = '#374151';
|
|
177
|
+
baseStyles.statsCard.borderColor = '#4b5563';
|
|
178
|
+
baseStyles.statLabel.color = '#9ca3af';
|
|
179
|
+
baseStyles.sectionContainer.backgroundColor = '#374151';
|
|
180
|
+
baseStyles.sectionContainer.borderColor = '#4b5563';
|
|
181
|
+
}
|
|
182
|
+
return baseStyles;
|
|
183
|
+
};
|
|
184
|
+
var styles = getThemeStyles();
|
|
185
|
+
var handleCardClick = function handleCardClick(card) {
|
|
186
|
+
setCurrentSection(card.title.toLowerCase());
|
|
187
|
+
};
|
|
188
|
+
var handleBackToDashboard = function handleBackToDashboard() {
|
|
189
|
+
setCurrentSection(null);
|
|
190
|
+
};
|
|
191
|
+
var renderAdminSection = function renderAdminSection() {
|
|
192
|
+
var sectionProps = {
|
|
193
|
+
projectId: projectId,
|
|
194
|
+
theme: theme === 'dark' ? 'dark' : 'blue'
|
|
195
|
+
};
|
|
196
|
+
switch (currentSection) {
|
|
197
|
+
case 'users':
|
|
198
|
+
return /*#__PURE__*/_react["default"].createElement(_admin["default"], _extends({}, sectionProps, {
|
|
199
|
+
showActions: true
|
|
200
|
+
}));
|
|
201
|
+
case 'functions':
|
|
202
|
+
return /*#__PURE__*/_react["default"].createElement(_admin2["default"], sectionProps);
|
|
203
|
+
case 'notifications':
|
|
204
|
+
return /*#__PURE__*/_react["default"].createElement(_admin3["default"], sectionProps);
|
|
205
|
+
case 'invoices':
|
|
206
|
+
return /*#__PURE__*/_react["default"].createElement(_admin4["default"], sectionProps);
|
|
207
|
+
case 'slides':
|
|
208
|
+
return /*#__PURE__*/_react["default"].createElement(_admin5["default"], sectionProps);
|
|
209
|
+
case 'forms':
|
|
210
|
+
return /*#__PURE__*/_react["default"].createElement(_admin6["default"], sectionProps);
|
|
211
|
+
case 'waitlist':
|
|
212
|
+
return /*#__PURE__*/_react["default"].createElement(_admin7["default"], sectionProps);
|
|
213
|
+
default:
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
if (!projectId) {
|
|
218
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
219
|
+
style: _objectSpread(_objectSpread({}, styles.container), {}, {
|
|
220
|
+
textAlign: 'center',
|
|
221
|
+
padding: '40px'
|
|
222
|
+
})
|
|
223
|
+
}, /*#__PURE__*/_react["default"].createElement("p", {
|
|
224
|
+
style: {
|
|
225
|
+
color: '#6b7280',
|
|
226
|
+
fontSize: '16px'
|
|
227
|
+
}
|
|
228
|
+
}, "Project ID is required for admin functionality"));
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// If a section is selected, show that section
|
|
232
|
+
if (currentSection) {
|
|
233
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
234
|
+
style: styles.container
|
|
235
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
236
|
+
style: styles.backButton,
|
|
237
|
+
onClick: handleBackToDashboard
|
|
238
|
+
}, "\u2190 Back to Dashboard"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
239
|
+
style: styles.header
|
|
240
|
+
}, /*#__PURE__*/_react["default"].createElement("h1", {
|
|
241
|
+
style: styles.title
|
|
242
|
+
}, currentSection.charAt(0).toUpperCase() + currentSection.slice(1), " Management"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
243
|
+
style: styles.subtitle
|
|
244
|
+
}, "Manage your ", currentSection, " settings")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
245
|
+
style: styles.sectionContainer
|
|
246
|
+
}, renderAdminSection()));
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Show the main dashboard
|
|
250
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
251
|
+
style: styles.container
|
|
252
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
253
|
+
style: styles.header
|
|
254
|
+
}, /*#__PURE__*/_react["default"].createElement("h1", {
|
|
255
|
+
style: styles.title
|
|
256
|
+
}, "Admin Dashboard"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
257
|
+
style: styles.subtitle
|
|
258
|
+
}, "Manage your project settings and users")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
259
|
+
style: styles.grid
|
|
260
|
+
}, adminCards.map(function (card, index) {
|
|
261
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
262
|
+
key: card.href || index,
|
|
263
|
+
style: styles.card,
|
|
264
|
+
onMouseEnter: function onMouseEnter(e) {
|
|
265
|
+
e.currentTarget.style.transform = styles.cardHover.transform;
|
|
266
|
+
e.currentTarget.style.boxShadow = styles.cardHover.boxShadow;
|
|
267
|
+
},
|
|
268
|
+
onMouseLeave: function onMouseLeave(e) {
|
|
269
|
+
e.currentTarget.style.transform = 'none';
|
|
270
|
+
e.currentTarget.style.boxShadow = styles.card.boxShadow;
|
|
271
|
+
},
|
|
272
|
+
onClick: function onClick() {
|
|
273
|
+
return handleCardClick(card);
|
|
274
|
+
}
|
|
275
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
276
|
+
style: styles.cardHeader
|
|
277
|
+
}, card.icon && /*#__PURE__*/_react["default"].createElement("div", {
|
|
278
|
+
style: _objectSpread(_objectSpread({}, styles.cardIcon), {}, {
|
|
279
|
+
color: '#3b82f6'
|
|
280
|
+
})
|
|
281
|
+
}, /*#__PURE__*/_react["default"].createElement(card.icon)), /*#__PURE__*/_react["default"].createElement("h3", {
|
|
282
|
+
style: styles.cardTitle
|
|
283
|
+
}, card.title)), /*#__PURE__*/_react["default"].createElement("p", {
|
|
284
|
+
style: styles.cardDescription
|
|
285
|
+
}, card.description), /*#__PURE__*/_react["default"].createElement("button", {
|
|
286
|
+
style: styles.cardButton,
|
|
287
|
+
onMouseEnter: function onMouseEnter(e) {
|
|
288
|
+
e.target.style.background = styles.cardButtonHover.background;
|
|
289
|
+
},
|
|
290
|
+
onMouseLeave: function onMouseLeave(e) {
|
|
291
|
+
e.target.style.background = styles.cardButton.background;
|
|
292
|
+
}
|
|
293
|
+
}, "Manage ", card.title));
|
|
294
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
295
|
+
style: styles.statsCard
|
|
296
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
297
|
+
style: styles.cardHeader
|
|
298
|
+
}, /*#__PURE__*/_react["default"].createElement("h3", {
|
|
299
|
+
style: styles.cardTitle
|
|
300
|
+
}, "Quick Stats")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
301
|
+
style: styles.statsGrid
|
|
302
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
303
|
+
style: styles.statItem
|
|
304
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
305
|
+
style: styles.statValue
|
|
306
|
+
}, "0"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
307
|
+
style: styles.statLabel
|
|
308
|
+
}, "Total Users")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
309
|
+
style: styles.statItem
|
|
310
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
311
|
+
style: styles.statValue
|
|
312
|
+
}, "0"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
313
|
+
style: styles.statLabel
|
|
314
|
+
}, "Active Projects")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
315
|
+
style: styles.statItem
|
|
316
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
317
|
+
style: styles.statValue
|
|
318
|
+
}, "0"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
319
|
+
style: styles.statLabel
|
|
320
|
+
}, "Pending Tasks")))));
|
|
321
|
+
};
|
|
322
|
+
AdminDashboard.propTypes = {
|
|
323
|
+
projectId: _propTypes["default"].string.isRequired,
|
|
324
|
+
adminCards: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
325
|
+
title: _propTypes["default"].string.isRequired,
|
|
326
|
+
description: _propTypes["default"].string.isRequired,
|
|
327
|
+
icon: _propTypes["default"].elementType
|
|
328
|
+
})),
|
|
329
|
+
theme: _propTypes["default"].oneOf(['default', 'dark'])
|
|
330
|
+
};
|
|
331
|
+
var _default = exports["default"] = AdminDashboard;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "AdminDashboard", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _AdminDashboard["default"];
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "PowrBaseFormsAdmin", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _admin6["default"];
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "PowrBaseFunctionsAdmin", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function get() {
|
|
21
|
+
return _admin2["default"];
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "PowrBaseInvoicesAdmin", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function get() {
|
|
27
|
+
return _admin4["default"];
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "PowrBaseNotificationsAdmin", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function get() {
|
|
33
|
+
return _admin3["default"];
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "PowrBaseSlidesAdmin", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function get() {
|
|
39
|
+
return _admin5["default"];
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "PowrBaseUsersAdmin", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function get() {
|
|
45
|
+
return _admin["default"];
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
Object.defineProperty(exports, "PowrBaseWaitListAdmin", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
get: function get() {
|
|
51
|
+
return _admin7["default"];
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
var _AdminDashboard = _interopRequireDefault(require("./AdminDashboard"));
|
|
55
|
+
var _admin = _interopRequireDefault(require("../users/admin"));
|
|
56
|
+
var _admin2 = _interopRequireDefault(require("../functions/admin"));
|
|
57
|
+
var _admin3 = _interopRequireDefault(require("../notifications/admin"));
|
|
58
|
+
var _admin4 = _interopRequireDefault(require("../invoices/admin"));
|
|
59
|
+
var _admin5 = _interopRequireDefault(require("../slides/admin"));
|
|
60
|
+
var _admin6 = _interopRequireDefault(require("../forms/admin"));
|
|
61
|
+
var _admin7 = _interopRequireDefault(require("../waitlists/admin"));
|
|
62
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "AdminDashboard", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _admin8.AdminDashboard;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
Object.defineProperty(exports, "PowrBaseActivities", {
|
|
7
13
|
enumerable: true,
|
|
8
14
|
get: function get() {
|
|
@@ -143,4 +149,5 @@ var _admin4 = _interopRequireDefault(require("./invoices/admin"));
|
|
|
143
149
|
var _admin5 = _interopRequireDefault(require("./notifications/admin"));
|
|
144
150
|
var _admin6 = _interopRequireDefault(require("./users/admin"));
|
|
145
151
|
var _admin7 = _interopRequireDefault(require("./functions/admin"));
|
|
152
|
+
var _admin8 = require("./admin");
|
|
146
153
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
package/dist/utils/auth.js
CHANGED
|
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.getAuthToken = exports.createAuthHeaders = exports.apiCall = void 0;
|
|
7
|
-
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); }
|
|
8
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 }; })(); }
|
|
9
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 _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); }
|
|
10
10
|
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); }
|
|
11
11
|
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); }); }; }
|
|
12
12
|
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; }
|
|
@@ -52,7 +52,10 @@ var apiCall = exports.apiCall = /*#__PURE__*/function () {
|
|
|
52
52
|
options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
|
|
53
53
|
config = _objectSpread({
|
|
54
54
|
headers: createAuthHeaders(options.headers)
|
|
55
|
-
}, options);
|
|
55
|
+
}, options); // If body is provided and is an object, stringify it
|
|
56
|
+
if (config.body && _typeof(config.body) === 'object' && !(config.body instanceof FormData)) {
|
|
57
|
+
config.body = JSON.stringify(config.body);
|
|
58
|
+
}
|
|
56
59
|
_context.n = 1;
|
|
57
60
|
return fetch(url, config);
|
|
58
61
|
case 1:
|